题源:最长递增子序列的个数
做这个题之前可以顺路复习一下LIS最长递增子序列问题。
1. LIS
题源:最长递增子序列
最长递增子序列有两种做法;O(n2)的动态规划和O(nlogn)的贪心+二分。
1.1 动态规划
定义dp[i]为以第i个元素为结尾的最长上升子序列长度,其中num[i]必须被选择,那么状态转移方程为(dp初始化值为1):
dp[i] = max(dp[j]) + 1; j < i, num[i] > num[j]
def findNumberOfLIS(nums):
dp = [1] * len(nums)
for i in range(1, len(nums)):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max

本文详细介绍了最长递增子序列(LIS)及其个数的两种高效算法:动态规划(O(n²))和贪心+二分查找(O(nlogn))。通过实例说明了每种方法的实现过程及复杂度分析。
最低0.47元/天 解锁文章
270

被折叠的 条评论
为什么被折叠?



