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] 为结尾的最长子序列长度。
转移方程: 设 j ∈ [ 0 , i ) j \in [0,i) j