题解 | #数组中重复的数字#
数组中重复的数字
http://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
数组中重复数字
思路:数组中元素范围为0~n-1,所以如果没有重复元素,每个位置的元素都可以等于下标(即numbers[i] == i). 所以可以用交换操作将值为k的元素移到numbers[k],每次移动时比较之前的numbers[k]是否等于k,若等于,则k重复;反之,则进行swap。反复比较、交换,从而找到了数组中重复的元素。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型一维数组
* @return int整型
*/
public int duplicate (int[] numbers) {
// write code here
for(int i = 0; i < numbers.length; i++){
while(numbers[i] != i){
int k = numbers[i];
if(numbers[k] == k){
return k;
}else{
swap(numbers, i, k);
}
}
}
return -1;
}
public void swap(int[] nums, int a, int b){
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
}
}