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

为什么我的Remove Duplicates from Sorted Array解法部分用例不通过

问题原因

你写的代码存在两个核心错误:

  • splice方法参数使用错误:Array.splice()的第一个入参是待删除元素的索引位置,你当前传入的是nums[i + 1]也就是元素值,当元素值和索引碰巧一致时(比如前几个测试用例的0、1、2)会误打误撞正常运行,一旦元素值和索引不匹配就会删错位置,这就是你遇到3重复的核心原因。
  • 数组长度动态变化后索引逻辑错误:删除元素后数组长度会自动减1,你没有对循环变量i做回溯处理,会直接跳过删除后新移动到当前i+1位置的元素,导致部分重复项漏检。
修复后的遍历版本
const removedDuplicates = (nums) => {
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] === nums[i + 1]) {
      // 第一个参数传索引i+1,不是元素值
      nums.splice(i + 1, 1);
      // 删除后i回退1,下一轮循环还是检查当前位置,避免漏判
      i--;
    }
  }
  return nums.length;
};
更符合题目要求的快慢指针解法(时间复杂度O(n),避免splice的高开销)

题目要求原地修改、O(1)额外空间,用双指针法性能更高,可通过最大规模测试用例:

const removeDuplicates = (nums) => {
  if(nums.length === 0) return 0;
  // 慢指针指向最后一个不重复元素的位置
  let slow = 0;
  for(let fast = 1; fast < nums.length; fast++) {
    // 快指针找到和慢指针不一样的元素时,慢指针后移,赋值新元素
    if(nums[fast] !== nums[slow]) {
      slow++;
      nums[slow] = nums[fast];
    }
  }
  // 慢指针+1就是不重复元素的个数k
  return slow + 1;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:24:06