题目
给你一个整数数组 nums
,该数组具有以下属性:
nums.length == 2 * n
.nums
包含n + 1
个 不同的 元素nums
中恰有一个元素重复n
次
返回重复了 N
次的那个元素。
示例1:
1 | 输入:nums = [1,2,3,3] |
示例2:
1 | 输入:[2,1,2,5,3,2] |
示例3:
1 | 输入:[5,1,5,2,5,3,5,4] |
提示:
2 <= n <= 5000
nums.length == 2 * n
0 <= nums[i] <= 104
nums
由n + 1
个 不同的 元素组成,且其中一个元素恰好重复n
次
解法
解法一:
借助HashMap
JAVA
1 | public int repeatedNTimes(int[] A) { |
解法二:
比较
一旦找到一个重复元素,那么一定就是答案。我们称这个答案为主要元素。
考虑所有长度为 4 的子序列,在子序列中一定至少含有两个主要元素。
这是因为:
- 长度为 2 的子序列中都是主要元素,或者;
- 每个长度为 2 的子序列都恰好含有 1 个主要元素,这意味着长度为 4 的子序列一定含有 2 个主要元素。
因此,只需要比较所有距离为 1,2 或者 3 的邻居元素即可。
Java
1 | public int repeatedNTimes(int[] A) { |