子序列最值问题一般都用动态规划
一般解:
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
if not nums: return 0
# dp[i] 为考虑前 i 个元素,以第 i 个数字结尾的最长上升子序列的长度
n = len(nums)
dp = [1] * n
for i in range(n):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j]+1)
return max(dp)
# 时间复杂度:O(n^2)
# 空间复杂度:O(n)
最优解:
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
d = [nums[0]]
for i in range(1, len(nums)):
if nums[i] > d[-1]:
d.append(nums[i])
else:
l = 0; r = len(d) - 1
index