You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现读取整数到空输入后输出最长非递减序列

Python最长连续非递减序列实现方案

你要实现的是最长连续非递减子序列的查找,不需要复杂的分组函数,一次遍历即可完成逻辑,时间复杂度为O(n),效率很高。

完整代码

numlist = []
while True:
    number = input("enter n: ")
    if number != "":
        numlist.append(int(number))
    else:
        break
if not numlist:
    print("ERROR: please enter at least one number")
else:
    # 初始化当前序列和最长序列,默认从第一个元素开始
    current_seq = [numlist[0]]
    longest_seq = [numlist[0]]
    # 从第二个元素开始遍历
    for num in numlist[1:]:
        # 满足非递减条件就加入当前序列
        if num >= current_seq[-1]:
            current_seq.append(num)
        else:
            # 不满足条件时比较当前序列和最长序列的长度
            if len(current_seq) > len(longest_seq):
                longest_seq = current_seq.copy()
            # 重置当前序列
            current_seq = [num]
    # 遍历结束后还要再比较一次,避免最后一段序列是最长的情况
    if len(current_seq) > len(longest_seq):
        longest_seq = current_seq.copy()
    # 按要求空格分隔输出
    print(' '.join(map(str, longest_seq)))

逻辑说明

  • 不需要额外定义分组函数,直接通过两个列表分别记录当前统计的非递减序列、历史最长非递减序列即可
  • 遍历过程中只要当前元素大于等于当前序列的最后一个元素,就归入当前序列,否则触发长度比较,更新最长序列后重置当前序列
  • 遍历结束后必须额外做一次长度比较,因为如果最长序列刚好是列表的最后一段,遍历过程中不会触发比较逻辑
  • 完全符合你给出的三个示例的运行结果:
    • 示例1输入5 4 3 3 2 1,输出3 3
    • 示例2输入对应最长序列为1 3 7 8 9 9 10
    • 示例3所有元素递减,输出第一个元素5

内容的提问来源于stack exchange,提问作者Oggie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:57:04