题目:找出数组中重复的数字
在一个长度为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; }