数组中重复的元素

题目描述

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。
请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
 
/**
* 虽然是两重循环,但每个数字至多只要交换两次就能找到属于自己的位置,因此 时间复杂度是O(n),
* 所有的操作步骤在原数组进行,因此 空间复杂度为O(1)
*/
public boolean duplicate(int numbers[], int length, int[] duplication) {
int temp;
if (length <= 1)
return false;
for (int i = 0; i < length; i++) {
while (numbers[i] != i) {
if (numbers[numbers[i]] != numbers[i]) {
temp = numbers[numbers[i]];
numbers[numbers[i]] = numbers[i];
numbers[i] = temp;
} else {
// 找到了重复元素
duplication[0] = numbers[i];
return true;
}

}
}
return false;
}

猜你喜欢

转载自www.cnblogs.com/Aug-20/p/11724278.html
今日推荐