往期回顧:
題目描述:
在大小爲 2N 的數組 A 中有 N+1 個不同的元素,其中有一個元素重複了 N 次。返回重複了 N 次的那個元素。
示例 1:
輸入:[1,2,3,3]
輸出:3
示例 2:
輸入:[2,1,2,5,3,2]
輸出:2
示例 3:
輸入:[5,1,5,2,5,3,5,4]
輸出:5
解題思路1:
數組的長度爲2N,重複了N次的元素,肯定是出現次數最多的那個,所以直接使用collections包中的Counter模塊完成即可。
代碼1:
from collections import Counter
class Solution(object):
def repeatedNTimes(self, A):
N = len(A) // 2
return Counter(A).most_common(1)[0][0]
解題思路2:
找重複數字的一種典型方法就是:(原始數組 - 求集合後的差值) / 長度差
代碼2:
class Solution(object):
def repeatedNTimes(self, A):
return abs(sum(A)-sum(set(A)))/(len(A)-len(set(A)))
解題思路3:
通過設置最大零數組,然後逐個遍歷原有數組,當元素首次出現時,加1。這樣,當滿足出現的次數時,我們即可找出重複元素。
代碼3:
class Solution(object):
def repeatedNTimes(self, A):
bitmap = [0 for _ in range(max(len(A), max(A)+1))]
for num in A:
if bitmap[num] == (len(A) // 2)-1:
return num
else:
bitmap[num] += 1
題目來源:
https://leetcode-cn.com/problems/n-repeated-element-in-size-2n-array