求一组数的最长非递增子序列的长度-python
时间: 2024-11-27 11:19:49 浏览: 0
PTA丨最长连续递增子序列
在Python中,求解一组数的最长非递减子序列(Longest Non-Increasing Subsequence, LNIS)的长度通常使用动态规划的方法。以下是使用Python实现的一个简单示例:
```python
def length_of_lis(nums):
if not nums: return 0
n = len(nums)
tails = [0] * n # 存储每个位置到最后的最长递减子序列长度
for i in range(n):
tails[i] = 1 # 初始化所有元素的初始子序列长度为1
for j in range(i): # 遍历之前的位置
if nums[j] <= nums[i]:
tails[i] = max(tails[i], tails[j] + 1) # 如果nums[i]大于或等于nums[j],尝试合并
return max(tails)
# 示例
nums = [10, 9, 2, 5, 3, 7, 101, 18]
print(length_of_lis(nums)) # 输出:4
```
在这个代码里,`tails` 数组存储了每个位置到最后的最长递减子序列长度,通过不断比较和更新 `tails` 来寻找最长的非递增子序列。
阅读全文