952 B
952 B
思路
- dp[i]的定义
dp[i]表示i之前包括i的最长上升子序列。
- dp[i]的初始化
每一个i,对应的dp[i](即最长上升子序列)起始大小至少是1.
- 状态转移方程
位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。
if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if (nums.size() <= 1) return nums.size();
vector<int> dp(nums.size(), 1);
int result = 0;
for (int i = 1; i < nums.size(); i++) {
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);
}
if (dp[i] > result) result = dp[i]; // 取长的子序列
//for (int j = 0 ; j < nums.size(); j++) cout << dp[j] << " ";
//cout << endl;
}
return result;
}
};