offer 03 数组中重复的数字

题目描述:

在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。

实例输入与输出:

  1. 输入:[2,3,1,0,2,5,3]
  2. 输出:23

思路:

  • 由于数字有序,所以只需要将第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;
}

} ```