在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
※可能附加时间/空间需求
相关标签:数组
eg.
输入:
[1, 3, 1, 0, 2, 5, 3]
输出:1 或 3
解法一:
依次遍历数组,创建空集合,每次将遍历的元素放入集合,如果加入成功则继续,加入失败,表示存在重复元素,返回该元素。
class Solution {
public int findNum(int[] nums) {
Set set = new HashSet();
int repeat = -1;
for (int num : nums) {
if (!set.add(num)) {
repeat = num;
break;
}
}
return repeat;
}
}
解法二:
原地置换方法,读题可知,长度为你,元素都在0~n-1范围内,无重复元素情况下,正常升序排序,元素和下标一一对应。在有重复元素情况下,一次使用每一元素置换,直到置换到相应下标的为止,进行循环,如果循环中碰到置换后依旧相等的情况,就查找到了重复元素。
class Solution {
public int findRepeatNumber(int[] nums) {
int temp;
for(int i = 0;i