【Leetcode 数组、哈希表】重复 N 次的元素(961)
题目
在大小为 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
提示:
4 <= A.length <= 10000
0 <= A[i] < 10000
A.length 为偶数
解答
解法一:2N个空间,N+1个不同元素,遇到相同的就是答案。Time: O(N), Space: O(N)
解法二:根据可能的排列顺序解。有一半的数相等,那么排列中要么所有相同的数都不相邻,要么就必定存在相邻并相等的情形。Time: O(N), Space: O(1)
class Solution:
# 解法一
# def repeatedNTimes(self, A) -> int:
# s = set()
# for x in A:
# if x in s:
# return x
# else:
# s.add(x)
# 解法二
def repeatedNTimes(self, A) -> int:
if A[1] == A[3]:
return A[1]
for i in range(len(A)-1):
if A[i] == A[i+1]:
return A[i]
return A[0]
s = Solution()
ans = s.repeatedNTimes([1,2,3,3])
print(ans)
# [1,2,3,3]
# [3,3,2,1]
# [3,1,2,3]
# [1,3,2,3]
# [3,1,3,2]