原题链接
题目描述
题目思路
方法一:哈希表
- 遍历数组,分别将数组元素添加至哈希表中,若表中已存在该元素,则直接返回重复数字。
方法二:原地交换
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内
- 注意题目中有这样一个条件,即表示数组中所有的索引下标与数组元素为“一对多"的关系,因此,可以考虑将数组元素位置交换到与元素值相同的索引位置,而在交换之前,若是发现需要交换的位置上已经存在值相等的元素,则返回该元素。
代码实现
使用到的方法
- put(key,value):将key-value键值对加入到哈希表中。
- containsKey(key):查看表中是否存在名为key的键。
哈希表
class Solution {
Map map = new HashMap();
public int findRepeatNumber(int[] nums) {
for(int num : nums) {
if(map.containsKey(num)){
return num;
}else{
map.put(num,null);
}
}
return -1;
}
}
原地交换
class Solution {
public int findRepeatNumber(int[] nums) {
int i = 0;
while(i < nums.length) {
if(nums[i] == i) {
i++;
continue;
}
if(nums[nums[i]] == nums[i]) {
return nums[i];
}else{
int temp = nums[i];
nums[i] = nums[temp];
nums[temp] = temp;
}
}
return -1;
}
}