300. Longest Increasing Subsequence
MediumLeetCodeGiven an integer array nums, return the length of the longest strictly increasing subsequence.
Example 1
Input: nums = [
10,9,2,5,3,7,101,18]Output:
4Explanation: 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
Constraints
1 <= nums.length <= 2500-10^4 <= nums[i] <= 10^4
How to solve the problem
- Binary Search with Greedy
python
# Approach 1: Binary Search with Greedy
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
g = [] # g[i]: the smallest tail of all increasing subsequences of length i+1
for x in nums:
j = bisect_left(g, x) # find insertion point for x to keep g sorted
if j == len(g):
g.append(x) # extend the sequence
else:
g[j] = x # replace to maintain the smallest possible tail
return len(g) # length of LISComplexity
- Time complexity: O(n * log n)
- Space complexity: O(n)
Comments
No comments yet. Be the first to comment!