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

Java中创建List<List<Integer>>时输出不符合预期的问题排查

排查与修正largeGroupPositions方法的问题

我来帮你排查这个问题哈,你的代码有几个关键的小问题导致输出不符合预期,咱们一步步拆解:

原代码的核心问题

  • 重复复用同一个List<Integer>对象:你只在开头初始化了一次l1,每次往l2里添加的都是这个l1的引用。后续修改l1的内容时,之前已经加到l2里的元素也会跟着被修改,最终所有结果都会变成最后一次修改的状态。
  • 循环结束后未处理最后一组连续字符:如果字符串的末尾是一组符合条件的大组(连续≥3个相同字符),循环结束后不会进入else分支,这组数据就会被遗漏。

修正后的代码

class Solution {
    public List<List<Integer>> largeGroupPositions(String S) {
        List<List<Integer>> result = new ArrayList<>();
        int n = S.length();
        
        // 提前处理边界情况:字符串长度不足3,直接返回空列表
        if (n < 3) {
            return result;
        }
        
        int count = 1;
        int startIndex = 0;
        
        for (int i = 1; i < n; i++) {
            if (S.charAt(i) == S.charAt(i - 1)) {
                count++;
            } else {
                // 检查当前组是否符合大组条件
                if (count >= 3) {
                    // 每次创建新的列表对象,避免引用复用问题
                    result.add(Arrays.asList(startIndex, i - 1));
                }
                // 重置计数与起始位置
                count = 1;
                startIndex = i;
            }
        }
        
        // 处理循环结束后,最后一组未检查的连续字符
        if (count >= 3) {
            result.add(Arrays.asList(startIndex, n - 1));
        }
        
        return result;
    }
}

关键修改说明

  1. 避免List对象复用:每次需要添加结果时,直接创建新的列表(用Arrays.asList()或者new ArrayList<>()),确保每个结果项都是独立的对象,不会互相干扰。
  2. 补充末尾组检查:循环结束后额外判断一次最后一组的长度,避免遗漏末尾的大组。
  3. 优化变量可读性:把l1、l2改成语义更清晰的result、startIndex,降低代码理解成本。
  4. 提前处理边界场景:如果字符串长度小于3,直接返回空列表,减少不必要的循环执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:34:11