不修改数组找出重复的数字
题目
在一个长度为n+1的数组里的所有数字都在1到n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字2或者3。
思路
我们新建一个数组,将数组中的每一个数字m,放到新数组下标为m的位置,如果有重复,说明有重复的数字m。
代码
public class FindDupNum2{
public int getDupNum2(int[] nums){
if(nums==null)
{
return -1;
}
int[] newnums= new int[nums.length];
for(int i=0; i<nums.length;i++)
{
int m=nums[i];
if(newnums[m]==null)
{
newnums[m]==m;
}
else if(newnums[m]!=null)
{
return m;
}
}
}
}