[最大最长]最长递增子序列
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
def find(nums, target):
left = 0
right = len(nums)
while left <= right:
mid = (left + right) // 2
if nums[mid] >= target:
res = mid
right -= 1
else:
left += 1
return res
n = len(nums)
queue = [nums[0]]
for i in range(1, n):
if nums[i] > queue[-1]:
queue.append(nums[i])
else:
index = find(queue, nums[i])
queue[index] = nums[i]
return len(queue)

浙公网安备 33010602011771号