版权声明:本文为博主原创文章,未经博主允许不得转载。有事联系:[email protected] https://blog.csdn.net/qq_17550379/article/details/85228446
在大小为 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
为偶数
解题思路
这个问题非常简单,最简单的做法就是先将输入数组排序,然后检索数组前后是否元素重复,输出重复元素即可。
class Solution:
def repeatedNTimes(self, A):
"""
:type A: List[int]
:rtype: int
"""
A.sort()
for i in range(1,len(A)):
if A[i-1] == A[i]:
return A[i]
显然这个问题应该有更好的解,因为我们到现在没有用到题设条件其中有一个元素重复了 N 次。我们以第二个例子为例,我们看第一个2
和第二个2
之间间隔几个元素
第一个2
和第二个2
之间间隔0
个元素。
第一个2
和第二个2
之间间隔1
个元素。
第一个2
和第二个2
之间间隔2
个元素。
第一个2
和第二个2
之间间隔3
个元素。
我们此时不难发现一个规律,如果我们不对数组进行排序的话,我们直接遍历数组。那么重复元素必然会有一对间隔0
或者间隔1
。那么这个问题就很简单了
class Solution:
def repeatedNTimes(self, A):
"""
:type A: List[int]
:rtype: int
"""
for i in range(len(A)):
if A[i - 1] == A[i] or A[i - 2] == A[i]:
return A[i]
reference:
我将该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!