数组中重复的数字
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。
思路
将数组的第i个数字本身的值m与i进行比较,如果相等,则不变,如果不等,将数组下标为m的数字与下标为i的数字进行交换,重复进行判断直到我们发现一组重复的数字为止。
代码
public class FindDupNum{
public int getDupNum(int[] nums){
if(nums==null)
{
return -1;
}
for(int i=0; i<nums.length;i++)
{
int tmp;
while(i!=nums[i]){
if(nums[nums[i]]==nums[i])
return nums[i];
tmp = nums[i];
nums[i]=nums[nums[i]];
nums[nums[i]]=nums[i];
}
}
}
}