剑指 Offer 03. 数组中重复的数字
思路
法一:使用哈希表存储,如果第二次出现,直接返回
法二:交换索引,对于当前索引i,第一次遍历到nums[i]时,如果nums[i]不等于i,那么就把nums[i]nums[nums[i]]交换,使得nums[nums[i]]=nums[i],保证索引与值相等。若遍历到nums[nums[i]]=nums[i],说明已经发生过交换,nums[i]就是那个重复的数字。
代码
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];
int tmp=nums[nums[i]];
nums[nums[i]]=nums[i];
nums[i]=tmp;
}
return -1;
}
}