300. Longest Increasing Subsequence
Description
Given an unsorted array of integers, find the length of longest increasing subsequence.
For example,
Given[10, 9, 2, 5, 3, 7, 101, 18]
,
The longest increasing subsequence is[2, 3, 7, 101]
, therefore the length is4
. Note that there may be more than one LIS combination, it is only necessary for you to return the length.
Your algorithm should run in O(n2) complexity.
Follow up:Could you improve it to O(nlogn) time complexity?
Discussion
Method 1
On^2
dp[i] = if(nums[j] < nums[i]) dp[j : j < i] + 1
Method 2
O(nlogn)
vector<int> dp; (no initialization)
for each num:
pos = lower\_bound\(dp\)
dp insert/replace num to pos;
rst = dp.size();