代码之家  ›  专栏  ›  技术社区  ›  Wadu Hek

查找列表中唯一的重复项

  •  -1
  • Wadu Hek  · 技术社区  · 2 年前

    我试图解决一个挑战,在那里,你会得到一个列表,其中只包含一个重复。 约束条件是必须在O(N)时间和O(1)空间内完成。

    但是,当我尝试使用公式N*(N+1)/2时,当将两者相减时,我无法得到正确的结果。例如,当

    nums = [1,2,3,3] 
    nums = [1,1,2,3]
    

    所以,我尝试了公式的一个变体,并使用了N*(N-1)/2,正如你们所看到的,它对所有情况都非常有效。

    我无法理解上述公式的意义是什么,为什么这个公式在这种特殊情况下有效,而不是在标准情况下有效。

    class Solution:
        def solve(self, nums):
            # Calculating the sum
            listSum = sum(nums)
    
            length = len(nums)
    
            actual = int(length * ((length-1)/2))
    
            return (abs(listSum - actual))
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Mark Bailey zalun    2 年前

    如果列表中有N个元素,则它们是前N-1个自然数,再加上重复数。这就是为什么前N-1个自然数之和的公式给出了正确的解。