解法:动态规划
dp[i]为以nums[i]为结尾的最长上升子序列
为j<i,以nums[j]为结尾的最长上升子序列+1
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
//初始化
vector<int> dp(nums.size(),1);
//状态:以i为结尾的子序列长度
for(int i=0;i<nums.size();i++){
for(int j=0;j<i;j++){ //寻找i前面比i小的值的最大序列长度
if(nums[j]<nums[i])
dp[i]=max(dp[i],dp[j]+1);
}
}
//寻找dp数组里的最大值
int res=0;
for(int i=0;i<dp.size();i++)
res=max(res,dp[i]);
return res;
}
};