请帮我写出python程序设计题,题目如下:求一组数中的最长连续递增子序列。假设这组数以0作为结束标志。 输入: 1 9 2 5 7 3 4 6 8 0 输出: 3 4 6 8
时间: 2024-09-28 10:17:09 浏览: 57
Python 题目描述:编写一个函数,给定一个整数列表(不含0),找到其中最长的递增子序列(每个数字都大于前一个)。列表会以0结尾,表示序列的终止。你需要返回这个子序列中最长的长度以及实际的递增子序列。
```python
def longest_increasing_subsequence(nums):
if not nums or nums[0] == 0:
return 0, []
n = len(nums)
tails = [0] * (n + 1) # tails[i] 保存到 i 的最大递增子序列长度
prevs = [-1] * (n + 1) # prevs[i] 保存到 i 的最后一个递增元素索引
max_len = 1
for i in range(1, n):
if nums[i] > nums[tails[-1]]:
tails.append(i)
else:
idx = tails[bisect_left(tails, nums[i])]
tails[idx] = i
if nums[i] - nums[prevs[idx]] > max_len - 1:
max_len = nums[i] - nums[prevs[idx]] + 1
prevs[i] = prevs[idx]
# 从尾部反向获取最长递增子序列
result = []
current = tails[-1]
while current != -1:
result.insert(0, nums[current])
current = prevs[current]
return max_len, result
# 示例
nums = [1, 9, 2, 5, 7, 3, 4, 6, 8, 0]
length, sequence = longest_increasing_subsequence(nums)
print(f"最长递增子序列长度:{length}")
print(f"最长递增子序列为:{sequence}")
```
阅读全文