最长递增子序列

最长递增子序列

题目

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

示例

image

解题思路

  1. 分析题目严格递增子序列,删除数组中的元素而不改变其余元素的顺序。
  2. 我们可以通过动态规划,dp[i]表示在位置i前方严格递增元素个数。
  3. 推出动态方程为:
if(nums[i] >num[k] )
dp[i] = max(dp[i], dp[k]+1);
  1. 编写代码,进行数据验证。

解题代码

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n = nums.size();
        int result = 1;
        vector<int> dp(n, 1);
        for(int i = 0; i < n; i++){
            for(int k = 0; k < i; k++){
                if(nums[k] < nums[i]){
                    dp[i] = max(dp[k]+1, dp[i]);
                    result = max(dp[i], result);
                }
            }
        }
        return result;
    }
};
posted @ 2026-04-22 19:58  heyuikn  阅读(15)  评论(0)    收藏  举报