題目描述:
給定一個包含 n + 1
個整數的數組 nums
,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重複的整數。假設只有一個重複的整數,找出這個重複的數。
示例 1:
輸入: [1,3,4,2,2]
輸出: 2
示例 2:
輸入: [3,1,3,4,2]
輸出: 3
解題思路1:
由於題目假設只有一個重複的整數,因此使用collections包中的Counter模塊之後,出現的第一位就是次數最多的元素。
代碼1:
from collections import Counter
class Solution(object):
def findDuplicate(self, nums):
return Counter(nums).most_common(1)[0][0]
解題思路2:
找重複數字的一種典型方法就是:(原始數組 - 求集合後的差值) / 長度差
代碼2:
class Solution(object):
def findDuplicate(self, nums):
return abs(sum(nums)-sum(set(nums)))/abs(len(nums)-len(set(nums)))
解題思路3:
通過設置最大零數組,然後逐個遍歷原有數組,當元素首次出現時,置爲1。這樣,當下次出現時,我們即可找出重複元素。
代碼3:
class Solution:
def findDuplicate(self, nums):
bitmap = [0 for _ in range(max(len(nums), max(nums)+1))]
for num in nums:
if bitmap[num] == 1:
return num
else:
bitmap[num] = 1
題目來源: