题目描述:给定一个整数数组 nums,要求找出该数组中最长的递增子序列(LIS)的长度,但有一个额外条件:LIS中的任意两个相邻元素必须不相等。
答案提示:
使用动态规划,但状态转移方程需要考虑当前元素与前一个LIS中元素不相等的情况。 可以利用哈希表来优化查找过程,减少时间复杂度。
### 1. 最长递增子序列(LIS)的变种(相邻元素不相等)
def lengthOfLIS(nums):
if not nums:
return 0
n = len(nums)
dp = [1] * n
for i in range(n):
for j in range(i):
if nums[j] < nums[i] and (j + 1 >= i or nums[i]!= nums[j + 1]):
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)
nums = [10, 9, 2, 5, 3, 7, 101, 18]
print(lengthOfLIS(nums))
### 输出 4