/* 1、最直观的想法是,我直接一个俩层循环,一个一个比,不过效率太差了; 2、第二种思路,长度为n的数组,数字都在 0~ n-1 的范围,这样如果我们把这个数组按升序排列 扫描这个数组的元素,若数组不重复,会发现 第 i 个元素必定 为 i。 所以得出这样的思路 1)从头扫描数组,下标为 i 的数字 是不是等于 i 是:继续扫描 不是:将其和第 i 个数字比较,比较结果 若相等,重复,返回该数字 若不相等,交换这俩个数字 2)扫描完毕,未发现重复,返回-1 */ class Solution { public int findRepeatNumber(int[] nums) { for(int i = 0;i < nums.length;i++){ while(nums[i] != i){ if(nums[i] == nums[nums[i]]){ return nums[i]; } int tmp = nums[i]; nums[i] = nums[tmp]; nums[tmp] = tmp; } } return -1; } }