offer 03 数组中重复的数字
题目描述:
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
实例输入与输出:
输入:[2,3,1,0,2,5,3]输出:2或3
思路:
由于数字有序,所以只需要将第i个数字放回第i个序号的位置即可,如果有重复,那么这个重复的数字就是需要返回的。
递归过程中要做的事:
- 将值为i的元素放到第i个位置。
代码:
```java import java.util.*;
public class Solution { /**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型一维数组
* @return int整型
*/
public int duplicate (int[] numbers) {
int res = -1;
for(int i =0; i < numbers.length; i++){
while(numbers[i] != i){
if(numbers[i] == numbers[numbers[i]]){
return numbers[i];
}
swap(numbers,numbers[i],i);
}
swap(numbers,numbers[i],i);
}
return res;
}
private void swap(int[] arry, int x, int y){
int temp = arry[x];
arry[x] = arry[y];
arry[y] = temp;
}
} ```
