Leetcode300. Longest Increasing Subsequence
Leetcode300. Longest Increasing Subsequence
题目
思路
在当前位置上,回头看前边比它小的元素的最长序列有多长
官方题解有动画演示
这是动态规划解法,还可以用二分法继续降低复杂度,同样见官方题解
复杂度
-
时间复杂度 O ( N 2 ) \mathcal{O}(N^2) O(N2)
两层循环
每个位置需要回头看一遍前面的DP元素和Array元素 -
空间复杂度 O ( N ) \mathcal{O}(N) O(N)
新建DP数组
代码
class Solution:
def lengthOfLIS(self, nums):
if len(nums) <= 1:
return len(nums)
mem = [1] * len(nums)
for j in range(1, len(nums)):
for i in range(0, j):
if nums[i] < nums[j]:
mem[j] = max(mem[j], mem[i] + 1)
return max(mem)