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

Python中无法找出重复数字及对应缺失元素的问题排查

问题分析与解决

原代码存在的问题

  • 返回值未接收:主函数调用Solution().findErrorNums(arr)后,没把返回值赋值给变量,导致print(arr)输出的还是原数组。
  • 逻辑错误:遇到重复元素就直接用nums[i]+1当缺失值完全不成立,缺失值和重复值没有必然的+1关系,比如输入[2,2,3,4]时,缺失值是1,这个逻辑就彻底失效。
  • 返回格式错误:题目要求返回数组,原代码返回集合,不符合要求。

修正方案

推荐两种靠谱的实现思路:

思路1:总和计算法

利用1到n的理论总和、数组实际总和、去重后总和的差值,直接算出重复值和缺失值:

  • 1到n的理论总和:total = n*(n+1)//2
  • 重复值 = 数组实际总和 - 去重后总和
  • 缺失值 = 理论总和 - 去重后总和

思路2:哈希表统计法

统计每个数字的出现次数,遍历1到n找出出现2次的重复值、出现0次的缺失值。

修正后的代码

总和计算法实现

class Solution(object):
    def findErrorNums(self, nums):
        n = len(nums)
        # 计算1到n的理论总和
        total = n * (n + 1) // 2
        # 数组去重后的总和
        unique_sum = sum(set(nums))
        # 数组实际总和
        actual_sum = sum(nums)
        # 计算重复和缺失的数字
        duplicate = actual_sum - unique_sum
        missing = total - unique_sum
        return [duplicate, missing]

if __name__ == '__main__':
    arr = [1,2,2,4]
    # 接收函数返回结果
    result = Solution().findErrorNums(arr)
    print(result)  # 输出 [2,3]

哈希表统计实现

class Solution(object):
    def findErrorNums(self, nums):
        count = {}
        n = len(nums)
        duplicate = -1
        # 统计每个数字的出现次数
        for num in nums:
            count[num] = count.get(num, 0) + 1
            if count[num] == 2:
                duplicate = num
        # 查找缺失的数字
        missing = -1
        for i in range(1, n+1):
            if i not in count:
                missing = i
                break
        return [duplicate, missing]

if __name__ == '__main__':
    arr = [1,2,2,4]
    result = Solution().findErrorNums(arr)
    print(result)  # 输出 [2,3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:18