题目描述:
思路:
动态规划:
- 状态表示:dp[i]:以i位置为结尾的所有子序列中,最长递增子序列长度
- 状态转移方程:
0 <= j <= i - 1
当dp[i]长度为1时,dp[i] = 1
dp[i]长度不为1时,dp[i] = max(dp[j] + 1)
代码:
动态规划
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int n = nums.size();
vector<int> dp(n, 1);
int res = 1;
for(int i = 1;i < n; i++){
for(int j = 0;j < i; j++)
if(nums[j] < nums[i])
//更新以i为结尾的最长递增子序列长度
dp[i] = max(dp[j] + 1, dp[i]);
//更新最长子序列
res = max(res, dp[i]);
}
return res;
}
};