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

双指针法提取ArrayList唯一元素:代码为何缺失首个预期元素?

代码问题分析与修复

核心问题1:连续重复元素未被加入结果

当数组中存在连续重复的元素(比如开头的7),你的代码仅跳过了所有重复项,但没有将该唯一元素添加到结果列表。例如,若原数组开头是[7,7,56,...],进入else if分支后,p1会直接跳到第一个非7的位置,但7从未被加入ans,这就是首个元素缺失的原因。

核心问题2:最后一个元素可能被遗漏

循环条件p1 <= N-2限制了p1最多只能到数组的倒数第二个元素,当p1走到N-1(最后一个元素)时,循环直接终止,若该元素是唯一的,就会被遗漏。


修复后的代码

public static ArrayList<Integer> Unique_element (ArrayList<Integer> A){
    int N = A.size();
    ArrayList<Integer> ans = new ArrayList<>();
    if (N == 0) return ans; // 处理空数组边界
    int p1 = 0;

    while(p1 <= N-2){
        if(!A.get(p1).equals(A.get(p1+1)) ){
            ans.add(A.get(p1));
            p1++;
        } else {
            int left = A.get(p1);
            // 跳过所有重复项
            while(p1 < N && A.get(p1).equals(left)){
                p1++;
            }
            // 将当前唯一元素加入结果
            ans.add(left);
        }
    }
    // 处理最后一个未被遍历的元素
    if(p1 == N-1){
        ans.add(A.get(p1));
    }
    return ans;
}

修复说明

  1. 在跳过重复元素的分支中,新增ans.add(left),确保连续重复的唯一元素被加入结果。
  2. 循环结束后增加判断,处理最后一个未被循环覆盖的元素。
  3. 添加空数组的边界判断,避免索引越界异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:06:13