找出数组中重复的数字
在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
例如,如果 输入长度为7,的数组{2,3,1,0,2,5,3},
输出是重复的数组2或者3。
代码解析:此部分用到了数组下标对应相应的数字,因为题目中说了数组的值范围在0~你,因此可以使用下标交换,保证 下标==元素值
扩展,该方法也可以运用到排序
1 /*找出数组中重复的数字*/ 2 public int findRepeatNumber(int[] nums) { 3 for (int i = 0; i < nums.length; i++) { 4 if (nums[i] < 0 && nums[i] >= nums.length) { 5 return -1; 6 } 7 } 8 for (int i = 0; i < nums.length; i++) { 9 while (nums[i] != i && nums[nums[i]] != nums[i]) { 10 swap(nums, i, nums[i]); 11 } 12 if (nums[i] != i && nums[nums[i]] == nums[i]) { 13 return nums[i]; 14 } 15 } 16 return -1; 17 } 18 19 private void swap(int[] nums, int i, int num) { 20 int temp = nums[i]; 21 nums[i] = nums[num]; 22 nums[num] = temp; 23 }

浙公网安备 33010602011771号