Description
Submission
O(n^2)
class Solution { public: int lengthOfLIS(vector<int>& nums) { int n = nums.size(); vector<int> dp(n, 1); for(int i = 0; i < n; ++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()); } };
O(nlogn)
class Solution { public: int lengthOfLIS(vector<int>& nums) { vector<int> q; int n = nums.size(); for(int i = 0; i < n; ++i) { auto iter = lower_bound(q.begin(), q.end(), nums[i]); if(iter == q.end()) { q.push_back(nums[i]); } else { *iter = nums[i]; } } return q.size(); } };