LeetCode
- 版本1
- 时间复杂度
O
(
n
2
)
O(n^2)
O(n2)
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if(nums.empty()) return 0;
int n = nums.size();
vector<int> dp(n+1, 1);
int res = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < i; j++){
if(nums[i] > nums[j]) dp[i] = max(dp[i], dp[j]+1);
}
res = max(res, dp[i]);
}
return res;
}
};
- 版本2
- 时间复杂度
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if(nums.empty()) return 0;
int n = nums.size();
const int INF = 0x3f3f3f3f;
vector<int> low(n, INF);
for(int i = 0; i < n; i++){
*lower_bound(low.begin(), low.end(), nums[i]) = nums[i];
}
return lower_bound(low.begin(), low.end(), INF) - low.begin();
}
};