找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
class Solution {
public int findRepeatNumber(int[] nums) {
//数组 nums 里的所有数字都在 0~n-1 的范围内,不大于下标本身
//0 1 2 3 值对应自己的下标 nums[i]==i
//0 1 2 100 错误
//2 3 1 0 属于位置不对,应该重新按照下标放置位置
//判断元素重复的标准nums[i]==nums[nums[i]]
if(nums==null || nums.length==0) return -1;
int index=0;
while(index<nums.length){
if(nums[index]==index){
index++;
continue;
}
if(nums[index]==nums[nums[index]]){
return nums[index];
}
swap(nums,index,nums[index]);//交换元素
}
return -1;
}
void swap(int[] nums,int indexA,int indexB ){
int temp=nums[indexA];
nums[indexA]=nums[indexB];
nums[indexB]=temp;
}
}
方法:使用将元素摆放到数组对应的下标位置,如果该位置已经有元素证明重复