0961. N-Repeated Element in Size 2N Array #
题目 #
- 给你一个整数数组
nums
,该数组具有以下属性:nums.length == 2 * n
.nums
包含n + 1
个 不同的 元素nums
中恰有一个元素重复n
次
- 找出并返回重复了
n
次的那个元素。 2 <= n <= 5000
nums.length == 2 * n
0 <= nums[i] <= 104
nums
由n + 1
个 不同的 元素组成,且其中一个元素恰好重复n
次
思路 #
哈希 #
隔板 #
- 设重复元素为
x
, 则有结论: 存在一对相邻的x
, 二者间隔的非x
元素数目不超过2
- 证明: 若任取一对相邻的
x
, 所间隔的非x
元素数目均超过2
, 则所需要的元素总数大于n + 2*(n-1) = 3n-2
, 即2n > 3n-2
, 有n < 2
, 与题设矛盾
代码 #
哈希 #
class Solution {
public int repeatedNTimes(int[] nums) {
Set<Integer> set = new HashSet<>();
for (int num: nums) {
if (set.contains(num)) return num;
set.add(num);
}
return -1;
}
}
隔板 #
class Solution {
public int repeatedNTimes(int[] nums) {
for (int i = 0; i < nums.length; i++) {
for (int j = 1; j <= 3; j++) {
if (i+j<nums.length && nums[i] == nums[i+j]) return nums[i];
}
}
return -1;
}
}