LeetCode寻找唯一数问题:代码在[1,0,1]测试用例失败原因咨询
代码在nums=[1,0,1]测试用例中失败的原因
我们一步步拆解这个测试用例的执行流程,就能明白问题所在:
初始状态:nums = [1,0,1],i = 0
第一次循环
- 计算
nums.count(nums[0]),也就是统计数组中1的数量,结果是2,进入else分支 - 执行
nums.remove(nums[0]),移除数组中第一个1,此时nums变为[0,1] i自增为1
- 计算
第二次循环
- 当前
nums是[0,1],i=1,取nums[1]的值为1 - 计算
nums.count(1)结果是1,直接返回1,但正确答案应该是0
- 当前
错误根源
- 索引与数组结构不匹配:移除元素后数组长度缩短,但
i仍持续递增,导致跳过了本该检查的元素。原数组中索引1的0在第一个1被移除后,变成了新数组的索引0,但i直接跳到了1,完全没检查这个0。 remove方法的副作用:nums.remove(x)只会移除数组中第一个匹配x的元素,这会打乱原数组的元素顺序和索引对应关系,后续的索引操作逻辑彻底失效。
补充说明
部分测试用例能通过纯属巧合,比如当重复元素连续排列、唯一元素在数组末尾等场景,刚好让i的递增逻辑能命中目标元素,但这种写法本身逻辑就不严谨,完全依赖数组元素的排列顺序,不具备通用性。
内容的提问来源于stack exchange,提问作者Gvidas Rimkus
相关产品推荐
相关产品推荐

