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

LeetCode移除有序数组重复项:提交失败原因及Python解法

问题分析与正确解法

原代码错误原因

  • 未原地修改数组:你把nums直接赋值为set(nums),这只是在函数内部重新定义了局部变量nums,完全没改动传入的原数组。题目要求必须直接修改输入的nums数组本身,而不是重新赋值。
  • 破坏元素相对顺序:set是无序结构,会打乱原数组非降序的排列顺序,违反了题目中“保持相对顺序”的要求。
  • 未满足输出格式:判题系统会检查修改后的nums前k个元素是否为去重后的有序元素,你的代码没对原数组做任何修改,自然无法通过校验。

正确Python解法

因为输入数组是非降序排列的,我们可以用双指针法实现原地去重,时间复杂度O(n),空间复杂度O(1):

from typing import List

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if not nums:
            return 0
        
        # 慢指针指向当前唯一元素的最后位置
        slow = 0
        for fast in range(1, len(nums)):
            # 当快指针找到新的唯一元素时
            if nums[fast] != nums[slow]:
                slow += 1
                # 将新元素赋值到慢指针的下一个位置
                nums[slow] = nums[fast]
        
        # 唯一元素的个数是慢指针索引+1
        return slow + 1

解法说明

  1. 边界处理:如果数组为空,直接返回0。
  2. 双指针分工:slow指针维护去重后数组的末尾位置,fast指针遍历整个数组寻找新的唯一元素。
  3. 原地修改:当fast找到与slow指向元素不同的值时,移动slow并将该值覆盖到slow的位置,实现原地更新。
  4. 返回长度:最终slow + 1就是去重后唯一元素的个数,此时nums的前slow+1个元素就是保持原顺序的唯一元素。

内容的提问来源于stack exchange,提问作者Yash Kumar Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:55:56