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

LeetCode第26题代码无法通过,请求分析问题原因

有序数组去重代码问题排查

你的代码存在的核心问题

  • 不符合题目要求的返回格式:绝大多数此类算法题(比如LeetCode第26题)要求原地修改输入的原数组,并返回去重后的数组长度,而非返回一个新数组。测试用例会检查原数组的内容是否被正确修改,而非你返回的新数组。
  • 对象遍历顺序无保障:使用for...in遍历对象时,ECMAScript标准并未保证键的遍历顺序。虽然对于纯正整数键的对象,现代浏览器可能按数字顺序遍历,但这不是绝对的(比如数组包含负数时顺序会混乱),而原数组是有序的,依赖对象遍历顺序会导致结果不可靠。
  • 空间复杂度冗余:你的代码额外使用了对象和新数组,空间复杂度为O(n),而题目通常期望使用O(1)的额外空间完成操作。

修正后的代码(双指针法,原地修改)

var removeDuplicates = function(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];
        }
    }
    return slow + 1;
};

修正思路说明

  1. 双指针逻辑:
    • 慢指针slow始终指向去重后数组的最后一个有效元素位置。
    • 快指针fast遍历整个原数组,当遇到与slow指向元素不同的值时,将slow后移一位,并把fast对应的值赋给slow的位置。
  2. 原地修改:直接在原数组上覆盖重复元素,无需额外存储空间。
  3. 返回值正确:返回slow + 1即为去重后的数组长度,原数组的前slow + 1个元素就是去重后的有序结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:48:58