LIS:long increase subsequence
将数组进行排序,之后做法同上(有错误)
# class Solution:
# def lengthOfLIS(self, nums: List[int]) -> int:
# new_num = sorted(nums)
# # print(nums)
# # print(new_num)
# dp = [[0] * (len(nums)+1) for _ in range(len(nums)+1)]
#
# for i in range(1, n + 1):
# for j in range(1, n + 1):
# if nums[i - 1] == new_num[j - 1]:
# if new_num[j-1] == new_num[j-2]:
# continue
# dp[i][j] = dp[i - 1][j - 1] + 1
# else:
# dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
#
# return dp[n][n]
错误示例:原因:要求是严格递增子序列,这里相等不成立。
输入:
[7,7,7,7,7,7,7]
输出:
7
预期结果:
1
原因:待分析。
输入:
[1,2,2,2]
输出:
1
预期结果:
2
解题思路:动态规划
状态定义:
- d p [ i ] dp[i] dp[i] 的值代表 n u m s nums nums 以 n u m s [ i ] nums[i] nums[i] 为结尾的最长子序列长度。

博客介绍了如何使用动态规划解决LeetCode中300题——最长递增子序列问题。通过状态定义、转移方程及初始状态的设定,解释了如何找到严格递增子序列的最长长度。时间复杂度为O(N^2),空间复杂度为O(N)。
最低0.47元/天 解锁文章
1206

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



