Lintcode刷题日记之287. 寻找重复数

287寻找重复数

题目描述:

一个长度为 n + 1 的整形数组,其中的数字都在 1 到 之间,包括 1 和 n ,可知至少有一个重复的数字存在。假设只有一个数字重复,找出这个重复的数字。

注意:

  1. 不能更改数组内容(假设数组是只读的)。
  2. 只能使用恒定的额外空间,即要求空间复杂度是 O(1) 。
  3. 时间复杂度小于 O(n2)
  4. 数组中只有一个数字重复,但它可能不止一次重复出现。

Python解法:

class Solution:
    def findDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        a_set = set(nums) #转换为集合,集合中无重复元素
        sum_list = sum(nums) #求出原列表的和
        sum_set = sum(a_set) #求出新集合的和
        
        len_list = len(nums) #求出原列表的长度
        len_set = len(a_set) #求出新集合的长度
        
        result = (sum_list - sum_set) // (len_list - len_set)
        
        return result

猜你喜欢

转载自blog.csdn.net/langhahaha/article/details/79963123