找出数组中重复的数字

在一个长度为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     }

 

posted @ 2020-08-01 10:48  王余阳  阅读(386)  评论(0)    收藏  举报