300. 最长递增子序列 (动态规划 ,状态获取条件不同)

rt  :

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

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

s:

该dp数组表示当前长度下最大的递增序列长度,那么dp[i]的取值,就要与0-i任意一个有关,因此递推dp[i]的时候需要遍历0-i,选取最大的给dp[i]

  

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        if (nums.size() <= 1) return nums.size();
        vector<int> dp(nums.size(), 1);
        int result = 0;
        for (int i = 1; i < nums.size(); i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j])
                    dp[i] = max(dp[i], dp[j] + 1);
                result = max(result, dp[i]);
            }
        }
        return result;
    }
};

 

posted @ 2022-11-24 16:38  tuffy_tc  阅读(16)  评论(0)    收藏  举报