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

方法1:动态规划,下面的代码写成了求最长连续递增子序列(dp数组设为了以i结尾的最长连续递增子序列),错误

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        vector<int>dp(nums.size());//以i结尾的最长连续递增子序列
        dp[0] = 1;
        int max_len = 1;//存储最长的子序列
        for(int i=1;i<nums.size();i++){
            if(nums[i] > nums[i-1]){
                dp[i] = dp[i-1] + 1;
                max_len = max(max_len,dp[i]);
            }
            else dp[i] = 1;
        }
        return max_len;
    }
};

修改:dp[i]=max(dp[j])+1,其中0≤j<i且num[j]<num[i]

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        vector<int>dp(nums.size(),1);//以i结尾的最长子序列
        for(int i=1;i<nums.size();i++){//更新dp数组
            for(int j=0;j<i;j++){//遍历i之前的所有dp数组
                if(nums[j] < nums[i]) dp[i] = max(dp[i],dp[j]+1);
            }
        }
        return *max_element(dp.begin(),dp.end());
    }
};

方法2:贪心+二分查找