Skip to content

Longest Increasing Subsequence⚓︎

Link

Description⚓︎

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

A subsequence is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements.

Example 1:

  • Input: nums = [10,9,2,5,3,7,101,18]
  • Output: 4
  • Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.

Example 2:

  • Input: nums = [0,1,0,3,2,3]
  • Output: 4

Example 3:

  • Input: nums = [7,7,7,7,7,7,7]
  • Output: 1

Constraints:

  • 1 <= nums.length <= 2500
  • -10^4 <= nums[i] <= 10^4

Solution⚓︎

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n = nums.size();
        vector<int> dp(n, 0);

        for (int i = 0; i < n; i++) {
            dp[i] = 1;
            for (int j = 0; j < i; j++) {
                if (nums[j] < nums[i])
                    dp[i] = max(dp[i], dp[j] + 1);
            }
        }

        int res = 0;
        for (int i = 0; i < n; i++) res = max(res, dp[i]);

        return res;
    }
};
  • Time complexity: \(O(n^2)\);
  • Space complexity: \(O(n)\).