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

LeetCode 26题:返回正确计数但nums未被识别修改的问题

问题解决:LeetCode移除重复元素原地修改问题

问题原因

你代码里的nums = array只是在函数内部让局部变量nums指向了新创建的列表,并没有修改LeetCode传入的原列表对象。LeetCode平台检测的是最初传入的那个列表的内容,所以会判定nums未发生变化。

Python中列表是可变对象,但函数参数传递的是对象的引用。当你执行nums = array时,只是把函数内部的nums变量指向了新的列表,原列表的内存地址和内容都没被改动。

解决方案:原地修改原数组

LeetCode要求原地修改原数组的前k个元素,不能重新赋值新数组。推荐使用双指针法实现:

class Solution(object):
    def removeDuplicates(self, nums):
        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]  # 将不重复元素放到慢指针位置
        return slow + 1  # 慢指针从0开始,所以元素个数是slow+1

代码逻辑说明

  • 慢指针slow初始指向第一个元素,快指针fast从第二个元素开始遍历。
  • 当快指针找到和慢指针位置不同的元素时,说明遇到了新的不重复元素:将慢指针后移一位,把快指针的元素赋值到慢指针的位置。
  • 遍历结束后,slow + 1就是去重后的元素个数,原数组的前slow + 1个元素已经是去重后的结果,符合题目要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:33:13