0961. N-Repeated Element in Size 2N Array #
题目 #
- 给你一个整数数组
nums,该数组具有以下属性:nums.length == 2 * n.nums包含n + 1个 不同的 元素nums中恰有一个元素重复n次
- 找出并返回重复了
n次的那个元素。 2 <= n <= 5000nums.length == 2 * n0 <= nums[i] <= 104nums由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;
}
}