[模板题] - 300. 最长递增子序列

题目链接 300. 最长递增子序列
思路 1. 动态规划 2. 贪心+二分
题解链接 【视频】三种方法:记忆化搜索/递推/二分查找(Python/Java/C++/Go)
关键点
时间复杂度 动态规划:O(n2) 贪心+二分:O(nlogn)
空间复杂度 动态规划:O(n) 贪心+二分:O(n)

代码实现(动态规划):

class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
@cache
def dfs(i):
answer = 0
for j in range(i):
if nums[j] < nums[i]:
answer = max(answer, dfs(j))
return answer + 1
return max(dfs(i) for i in range(len(nums)))

代码实现(贪心+二分):

class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
g = []
for x in nums:
j = bisect_left(g, x)
if j == len(g):
g.append(x)
else:
g[j] = x
return len(g)
posted @   WrRan  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示