目录
1. 问题描述
给你一个整数数组 nums
,该数组具有以下属性:
nums.length == 2 * n
.nums
包含n + 1
个 不同的 元素nums
中恰有一个元素重复n
次
找出并返回重复了 n
次的那个元素。
示例 1:
输入:nums = [1,2,3,3] 输出:3
示例 2:
输入:nums = [2,1,2,5,3,2] 输出:2
示例 3:
扫描二维码关注公众号,回复:
14232863 查看本文章

输入:nums = [5,1,5,2,5,3,5,4] 输出:5
提示:
2 <= n <= 5000
nums.length == 2 * n
0 <= nums[i] <= 10^4
nums
由n + 1
个 不同的 元素组成,且其中一个元素恰好重复n
次
2. 思路与算法
2*n个元素中有n+1个不同的元素,其中恰有一个重复了n次,这意味着其它n个元素都恰好各出现一次。
可以将数组先排序,然后遍历一次,只要找到连续两个相同的元素就找到所求元素。这样的时间复杂度为。
还有没有更好的办法?比如说线性复杂度?能否不做排序直接一次遍历找出答案?利用哈希表查找效率的优势。用一个哈希表来存储不同的数据,python中可以用set实现。将数组中的元素逐个读出并检查是否已经存在于set中,如果是则它就是答案;如果不是,则将其放入。这样以的空间复杂度的代价换来了线性时间复杂度的好处。
3. 代码
class Solution:
def repeatedNTimes(self, nums: List[int]) -> int:
s = set()
for num in nums:
if num in s:
return num
s.add(num)
执行用时:40 ms, 在所有 Python3 提交中击败了88.48%的用户
内存消耗:16.2 MB, 在所有 Python3 提交中击败了15.67%的用户
回到总目录:Leetcode每日一题总目录(动态更新。。。)