给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2] 是数组 [0,3,1,6,2] 的子序列。
示例 1:
输入:nums = [8,9,2,5,3,7,19,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。
题解:1:
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if (nums.empty()) return 0;
int len = nums.size();
vector<int> dp(len, 1);
for(int i = 0; i < len; i++) {
for (int j = 0; j < i; j++) {
if (nums[j] < nums[i]) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
}
return *max_element(dp.begin(), dp.end());
}
};
题解2:
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if (nums.empty()) return 0;
vector<int> vec;
int len = nums.size();
vec.push_back(nums[0]);
for(int i = 1; i < len; i++) {
if (nums[i] > vec.back()) {
vec.push_back(nums[i]);
}
else {
for (int j = vec.size() - 1; j >= 0; j--) {
if (nums[i] > vec[j]) {
vec[j+1] = nums[i];
break;
}
if (j == 0) {
vec[0] = nums[i];
}
}
}
}
return vec.size();
}
};