问题描述与解题思路
确定本题的状态表示
dp[i]的含义是以nums[i]为结尾的最长递增子序列的长度
确定本题的状态转移方程
for(int j=0;j<i;j++){
if(nums[i]>nums[j])
dp[i]=max(dp[i],dp[j]+1);
}
填表求值
根据初始条件和状态转移方程,确定填表顺序,进而逐步填满dp表,最终返回题目要的结果
代码实现
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int n=nums.size();
vector<int> dp(n,1);
int ret=1;
//dp[i]的含义是以nums[i]为结尾的最长递增子序列的长度
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j])
dp[i]=max(dp[i],dp[j]+1);
}
ret=max(ret,dp[i]);
}
return ret;
}
};

1637

被折叠的 条评论
为什么被折叠?



