题目描述:给你一个整数数组 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:贪心+二分查找