0961. N Repeated Element in Size 2 N Array

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
  • numsn + 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;
    }
}

致谢 #

宫水三叶