思路看注释
O(n ^ 2)
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int dp[nums.size()];
int ma = -1;
for (int i = 0; i < nums.size(); i++) {
dp[i] = 1;
for (int j = i - 1; j >= 0; j--) {
if (nums[i] > nums[j] ) dp[i] = max(dp[i], dp[j] + 1);
}
ma = max(ma, dp[i]);
}
return ma;
}
};
O(nlogn)
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int ans[nums.size()];
int t = 0;
for (int i = 0; i < nums.size(); i++) {
if (t && ans[t - 1] >= nums[i]) {
int l = 0, r = t - 1;
while (l < r) {
int mid = (l + r) >> 1;
if (ans[mid] < nums[i]) l = mid + 1;
else r = mid;
}
ans[l] = nums[i];
} else ans[t++] = nums[i];
}
return t;
}
};