【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]
posted @ 2020-01-23 08:37  961897  阅读(166)  评论(0编辑  收藏  举报