287. 寻找重复数
题目描述:
一个长度为 n + 1 的整形数组,其中的数字都在 1 到 n 之间,包括 1 和 n ,可知至少有一个重复的数字存在。假设只有一个数字重复,找出这个重复的数字。
注意:
- 不能更改数组内容(假设数组是只读的)。
- 只能使用恒定的额外空间,即要求空间复杂度是 O(1) 。
- 时间复杂度小于 O(n2)
- 数组中只有一个数字重复,但它可能不止一次重复出现。
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