0%

『LeetCode』961 在长度 2N 的数组中找出重复 N 次的元素

题目

961. 在长度 2N 的数组中找出重复 N 次的元素

给你一个整数数组 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:

输入:nums = [5,1,5,2,5,3,5,4]
输出:5

提示:

  • \(2 \leq n \leq 5000\)
  • \(nums.length == 2 * n\)
  • \(0 \leq nums[i] \leq 10^{4}\)
  • numsn + 1不同的 元素组成,且其中一个元素恰好重复 n

题解

【在长度 2N 的数组中找出重复 N 次的元素】简单模拟

依照题意,其实发现一个元素出现两次就能确定答案了。具体做法是用哈希表存储遍历过的元素,发现遍历过的元素即返回。

1
2
3
4
5
6
7
8
9
10
# Code language: Python
class Solution:
def repeatedNTimes(self, nums: List[int]) -> int:
s = set()
for i in nums:
if i in s:
return i
else:
s.add(i)
return -1
1
2
3
4
5
6
7
8
9
10
11
12
// Code language: Java
class Solution {
public int repeatedNTimes(int[] nums) {
Set<Integer> s = new HashSet<>();
for (int i: nums) {
if (s.contains(i))
return i;
s.add(i);
}
return -1;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
// Code language: Cpp
class Solution {
public:
int repeatedNTimes(vector<int>& nums) {
unordered_set<int> s;
for (int i: nums) {
if (s.find(i) != s.end())
return i;
s.emplace(i);
}
return -1;
}
};
  • 时间复杂度: \(O(n)\)
  • 空间复杂度: \(O(n)\)
--- ♥ end ♥ ---

欢迎关注我呀~