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

Java查找List最长递增序列 末尾元素未处理问题排查

查找List最长连续递增序列的代码修正方案

原有代码核心问题

原有实现无法得到正确结果,本质是3个逻辑漏洞:

  • 序列比较触发条件缺失:只有遍历到元素下降的位置才会比较暂存序列和结果的长度,如果最长递增序列出现在列表末尾、全程没有触发下降判断,这段序列永远不会被更新到结果中
  • 元素收录逻辑错误:每次循环仅收录i-1位置的元素,既漏掉了每个递增段的尾部元素,还把temp清空逻辑错误嵌套在长度判断分支里,暂存序列比结果短时不会清空,会拼接后续无关元素造成数据污染
  • 收尾逻辑缺失:循环遍历结束后,没有对最后一段暂存的递增序列做长度校验和结果更新

修正后可运行代码

public void findLongestSequence(List<Integer> values) {
    // 空列表边界处理
    if (values == null || values.isEmpty()) {
        System.out.println(values);
        System.out.println(new ArrayList<>());
        return;
    }
    List<Integer> result = new ArrayList<>();
    List<Integer> temp = new ArrayList<>();
    // 初始化暂存序列,放入首个元素
    temp.add(values.get(0));
    for (int i = 1; i < values.size(); i++) {
        if (values.get(i) >= values.get(i - 1)) {
            // 处于递增区间,将当前元素加入暂存序列
            temp.add(values.get(i));
        } else {
            // 递增中断,先比较暂存序列与当前结果的长度
            if (temp.size() > result.size()) {
                result.clear();
                result.addAll(temp);
            }
            // 无论暂存序列长度是否超过结果,都重置暂存序列,以当前元素为起点记录新序列
            temp.clear();
            temp.add(values.get(i));
        }
    }
    // 补全收尾逻辑:比较最后一段暂存序列的长度,更新结果
    if (temp.size() > result.size()) {
        result.clear();
        result.addAll(temp);
    }
    System.out.println(values);
    System.out.println(result);
}

验证说明

使用测试用例List.of(7, 2, 7, 1, 2, 3, 8, 1, 2, 3, 4, 5)运行修正后的代码,最终输出的最长递增序列为[1, 2, 3, 4, 5],与预期结果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:27:17