Longest Increasing Subsequence

Dynamic Programming LIS Easy

Given an integer array nums, return the length of the longest strictly increasing subsequence.


A subsequence is a sequence derived from an array by deleting some or no elements without changing the order of the remaining elements. For example, [3, 6, 2, 7] is a subsequence of [0, 3, 1, 6, 2, 2, 7].


The task is to find the length of the longest subsequence in which every element is greater than the previous one.

Examples:

Input: nums = [10, 9, 2, 5, 3, 7, 101, 18]

Output: 4

Explanation: The longest increasing subsequence is [2, 3, 7, 101], and its length is 4.

Input: nums = [0, 1, 0, 3, 2, 3]

Output: 4

Explanation: The longest increasing subsequence is [0, 1, 2, 3], and its length is 4

Input: nums = [7, 7, 7, 7, 7, 7, 7]

Constraints

  • 1 <= nums.length <= 105
  • -106 <= nums[i] <= 106

Hints

  • "Define dp[i] as the length of the longest increasing subsequence ending at index i. the recurrence relation is: dp[i]=max(dp[i],dp[j]+1)for all j<i and nums[j]<nums[i] "
  • "Instead of using dp[i], maintain a sorted array (sub) where: Each element in sub represents the smallest ending element of an increasing subsequence of a certain length. Use Binary Search (lower_bound in sub) to find the position where nums[i] should replace an element in sub."