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

LeetCode数组去重:两种算法差异及我的解法失效原因咨询

问题:LeetCode数组去重(返回长度)的实现问题

这是LeetCode上的经典数组去重问题,要求去除数组中的重复元素并返回去重后的数组长度。

正确解法示例

dict1 = {}
arr = []
for i in nums:
    if i not in dict1:
        dict1[i] = 1
        arr.append(i)
nums[:] = arr
return len(nums)

你的实现问题分析

嘿,我来帮你拆解下代码失效的原因!你写的代码无法正常运行,核心问题出在遍历数组的同时直接修改原数组,咱们具体看看:

你的代码:

hash = {}
for num in nums:
    if num in hash:
        nums.remove(num)
    hash[num] = num
return len(nums)

关键错误点

  • 遍历中修改数组导致元素跳过:当你在for循环里调用nums.remove(num)时,数组的长度和元素位置会立刻改变,循环的迭代器不会自动调整,导致部分元素被跳过。举个具体例子:
    假设原数组是[1,1,2]:

    1. 第一次循环,num是第一个1,不在hash中,执行hash[1] = 1;
    2. 第二次循环,num是第二个1,已在hash中,执行nums.remove(1),此时数组变成[1,2];
    3. 循环的迭代器原本指向原数组的第二个位置,现在数组长度变为2,循环直接结束,剩下的那个1完全没被处理,最终数组里仍有重复元素,返回的长度自然不符合预期。
  • (次要问题)hash字典的使用可以简化:其实用集合set来记录已出现元素会更简洁,比如seen = set(),但这不是代码失效的核心原因。

修复思路

如果你想在原数组上操作,可以改用双指针法(这也是该问题推荐的最优解法),或者像正确示例那样先收集不重复元素再替换原数组,避免在遍历过程中修改数组结构。

内容的提问来源于stack exchange,提问作者merry-go-round

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:33:40