Given an integer array nums
, return the length of the longest strictly increasing subsequence.
A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing the order of the remaining elements.
For example, [3,6,2,7]
is a subsequence of the array [0,3,1,6,2,2,7]
.
Test Cases
Example 1:
Input: nums = [10,9,2,5,3,7,101,18]
Output: 4
Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.
Example 2:
Input: nums = [0,1,0,3,2,3]
Output: 4
Example 3:
Input: nums = [7,7,7,7,7,7,7]
Output: 1
Solution
class Solution {
public int lengthOfLIS(int[] nums) {
int n = nums.length;
int[] lis = new int[n];
int size = 0;
for(int i=0; i<n; i++) {
int start = 0, end = size;
while(start != end) {
int mid = start + (end-start)/2;
if (lis[mid] < nums[i]) {
start = mid+1;
} else {
end = mid;
}
}
lis[start] = nums[i];
if (start == size) ++size;
}
return size;
}
}
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
size, lis = 0, [0]*len(nums)
for num in nums:
start, end = 0, size
while start != end:
mid = start + (end-start)//2
if lis[mid] < num:
start = mid+1
else:
end = mid
lis[start] = num
if start == size:
size += 1
return size