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

LeetCode 26题数组去重求助:代码返回结果不符合预期

问题排查与修正

你的代码存在三个核心问题:

  1. 未按要求原地修改原数组:你创建了newArr存储去重结果,但完全没有将newArr的内容写回nums。题目明确要求修改原数组,使得前k个元素是去重后的结果,所以测试时读取nums的前k个元素自然还是原数组的重复值。
  2. 多余的排序操作:题目已经说明输入数组是非降序排列的,你在循环里每次调用Arrays.sort(nums)完全没必要,既浪费性能,也不符合题目隐含的输入条件。
  3. 成员变量j的不合理使用:把j定义为类的成员变量,多次调用该方法时会导致j的值累加错误,应该将其定义为方法内部的局部变量。

修正后的代码(原地去重双指针法)

class Solution {
    public int removeDuplicates(int[] nums) {
        if (nums.length == 0) return 0;
        int slow = 0; // 慢指针:标记去重后数组的最后一个有效位置
        for (int fast = 1; fast < nums.length; fast++) {
            // 快指针找到与慢指针不同的元素时,更新慢指针并复制元素
            if (nums[fast] != nums[slow]) {
                slow++;
                nums[slow] = nums[fast];
            }
        }
        return slow + 1; // 去重后的元素个数是慢指针位置+1
    }
}

针对测试用例nums = [1,1,2]的执行过程:

  • 初始slow=0,fast=1:nums[1]等于nums[0],跳过。
  • fast=2:nums[2]不等于nums[0],slow变为1,将nums[2]的值2复制到nums[1]。
  • 循环结束,返回slow+1=2,此时nums的前2个元素为[1,2],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:02:19