原题链接:最长递增子序列
个人解法
思路:
动态规划
状态表示:f[i]
表示以i结尾的最长上升子序列
状态转移:f[i] = max(1, f[j] + 1), j : 1 ~ i - 1 && num[j] < nums[i]
时间复杂度: O ( n 2 ) O(n^2) O(n2)
代码:
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int n = nums.size();
vector<int> f(n + 1);
for(int i = 1;i <= n;i ++) {
f[i] = 1;
for(int j = 1;j < i;j ++) {
if(nums[j - 1] < nums[i - 1])
f[i] = max(f[j] + 1, f[i]);
}
}
int res = 0;
for(int i = 1;i <= n;i ++) res = max(res, f[i]);
return res;
}
};