数组中重复的数字

题目:找出数组中重复的数字

  在一个长度为n的数组里的所有数字都在0~n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次,请找出数组中任意一个重复的数字,例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复数字2或者3

  解题思路:遍历数组,比如当第一个数字为2,就将这个数字换到下标为2的位置上去,于是{1,3,2,0,2,5,3},第一个下标与对应的数字仍不相等,继续交换{3,1,2,0,2,5,3},继续交换{0,1,2,3,2,5,3},可以看到前四位已经对应,直到遍历到第五位,也就是下标为4的时候,如果当前下标对应的值等于该值作为下标后的值,那么就出现重复数字了。

  代码如下:

    

public static int duplicate(int[] num){
        int temp=num.length;//当返回的temp=数组大小的时候,说明该数组不存在重复值
        for (int i = 0; i <num.length ; i++) {
            while (num[i]!=i){
                if (num[i]==num[num[i]]){//该值等于该值作为下标的值,重复 
                    temp=num[i];
                    break;
                }
                //将该值与该值作为下标的值对换
                int temp1=num[i];
                num[i]=num[temp1];
                num[temp1]=temp1;
            }
        }
        return temp;
    }
原文地址:https://www.cnblogs.com/yeleia/p/9888086.html