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

如何修正求解最长连续递增子数组的Python代码?

修正最长连续递增子数组的Python代码

问题描述

需求:找出数组中的最长连续递增子数组(连续指元素在原数组中位置相邻,递增指后一个元素大于前一个)。
示例:输入 [1,2,3,1,5,7,8,9],输出 [1,5,7,8,9]

原代码问题分析

第一段代码问题

def longsub(l):
    newl = []
    for i in range(len(l)) :
        if l[i] < l[i+1] :
            newl.append(l[i])
        else :
            newl = []
    return newl
  • 直接错误:循环到数组最后一个元素时,i+1超出数组索引范围,触发list index out of range报错。
  • 逻辑缺陷:仅记录当前递增序列的部分元素,完全没保存历史最长的序列,最终返回的只是最后一段递增序列的片段,不符合需求。

第二段代码问题

def longsub(l):
    newl = []
    for i in range(len(l)) :
        if l[i] > l[i-1] :
            newl.append(l[i])
        else :
            newl = []
    return newl
  • 直接错误:i=0时,l[i-1]会取到数组最后一个元素,逻辑完全错误;同时递增子数组的首个元素永远不会被加入newl,因为只有当前元素大于前一个时才执行添加操作,首元素没有前置触发条件。
  • 逻辑缺陷:同样未保存历史最长序列,最终返回的只是最后一段递增序列的部分元素,不符合需求。

修正后的代码

我们需要同时跟踪当前递增序列和历史最长序列,同时处理边界情况:

def longsub(l):
    if not l:  # 处理空数组的边界情况
        return []
    
    max_seq = [l[0]]
    current_seq = [l[0]]
    
    for i in range(1, len(l)):
        if l[i] > l[i-1]:
            current_seq.append(l[i])
            # 当前序列长度超过最长序列时,更新最长序列
            if len(current_seq) > len(max_seq):
                max_seq = current_seq.copy()  # 用copy避免后续修改current_seq同步影响max_seq
        else:
            # 重置当前序列为仅包含当前元素
            current_seq = [l[i]]
    
    return max_seq

代码说明

  • 初始化:max_seq存历史最长的递增序列,current_seq存当前正在遍历的递增序列,初始都包含数组第一个元素。
  • 循环从索引1开始,避免i-1越界。
  • 当当前元素大于前一个时,加入当前序列;如果当前序列长度超过最长序列,就更新最长序列(必须用copy(),因为列表是引用类型,直接赋值会导致后续修改current_seq时同步改动max_seq)。
  • 当当前元素不大于前一个时,重置当前序列为仅包含当前元素,重新开始统计新的递增序列。
  • 提前处理空数组,避免后续逻辑报错。

测试示例:

print(longsub([1,2,3,1,5,7,8,9]))  # 输出: [1,5,7,8,9]
print(longsub([5,4,3,2,1]))        # 输出: [5]
print(longsub([]))                  # 输出: []
print(longsub([1,3,2,4,5,6]))      # 输出: [2,4,5,6]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:55:12