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

如何在有序无重复ArrayList中找到末尾数最大的连续5个整数

问题分析与代码修正

原代码的核心问题

  1. 连续序列追踪逻辑错误:原代码仅在遇到相邻连续元素时,将前一个元素加入结果,导致收集的是多个不连贯片段的元素(比如15来自15-14片段,12来自12-11片段),而非同一个连续5个元素的完整序列。
  2. 不必要的副作用:Collections.reverse(al)会原地修改传入的列表,破坏原数据结构。

修正后的代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Game {

    public static void test2(ArrayList<Integer> al) {
        ArrayList<Integer> result = new ArrayList<>();
        int currentSeqLength = 1;
        // 初始化,加入最后一个元素作为序列起点
        result.add(al.get(al.size() - 1));

        // 从倒数第二个元素开始向前遍历
        for (int i = al.size() - 2; i >= 0; i--) {
            // 检查当前元素与后一个元素是否连续(原列表是递增有序)
            if (al.get(i) == al.get(i + 1) - 1) {
                result.add(al.get(i));
                currentSeqLength++;
                // 找到连续5个元素就停止遍历
                if (currentSeqLength == 5) {
                    break;
                }
            } else {
                // 不连续则重置当前序列
                result.clear();
                result.add(al.get(i));
                currentSeqLength = 1;
            }
        }

        // 若需要正序结果(题目说明顺序无关,此步可选)
        Collections.reverse(result);
        System.out.println("new list: " + result);
    }

    public static void main(String[] args) {
        ArrayList<Integer> al = new ArrayList<>(Arrays.asList(3, 5, 7, 8, 9, 10, 11, 12, 14, 15));
        test2(al);
    }
}

修正逻辑说明

  1. 从后往前遍历:优先查找末尾数更大的连续序列,一旦找到长度为5的序列就停止,符合需求中“末尾数最大”的要求。
  2. 完整追踪连续序列:维护当前连续序列的长度,遇到不连续元素时重置序列,确保收集的是同一个连续片段的元素。
  3. 无副作用:不会修改传入的原列表,避免影响其他逻辑。

运行后输出为[8, 9, 10, 11, 12],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:02:52