最简单的解法是创建一个HashMap,将以数组中的数字作为key,出现的次数作为value存入该Map中。实现后发现同时较慢,肯定有更优的解法。
利用数组代替HashMap,利用数组下标作为Key可以实现更快速的寻找,因此遍历数组时,将数字交换到与之数值相对应的数组下标处,交换前先比较一下,如果两个位置的数值相同,则说明元素重复,直接返回,否则就执行交换操作。
class Solution {
public int findRepeatNumber(int[] nums) {
for(int i=0; i<nums.length; i++){
if(nums[i]!= i){
if(nums[i] == nums[nums[i]]){
return nums[i];
}
swap(nums, nums[i], i);
}
}
return 0;
}
public void swap(int[] nums, int a, int b){
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}