思路:从头到尾扫描数组每个数字,当扫描到下标为i的数字m时,首先比较m是不是等于i,如果是,继续扫描;如果不是,再拿m和第m个数字进行比较。如果他们相等,就找到第一个重复数字,如果不相等,交换两者位置。接下来重复上述过程,直到找到第一个重复数字。
public static int findDuplicateNum(int nums[],int len){
if(nums==null||len<=0){
return -1;
}
for(int i=0;i<len;i++){ //存在负数或者大于n-1的数返回-1
if(nums[i]<0||nums[i]>len-1){
return -1;
}
}
int number=0;
for(int i=0;i<len;i++){
//判断下标为i的数字m和i是否相等
while(nums[i]!=i){//不相等,判断m和第m的个数是否相等
//相等
if(nums[i]==nums[nums[i]]){
number=nums[i];
return number;
}
//不相等,交换位置
int temp=nums[i];
nums[i]=nums[temp];
nums[temp]=temp;
}
}
return -1;
}