no.03: 在一个长度为n的数组中的所有数字都在0~n - 1的范围内。找出数组中任何一个重复的数字
public class NO03 {
/**
* 在一个长度为n的数组中的所有数字都在0~n - 1的范围内。
* 找出数组中任何一个重复的数字
*/
public static void main(String[] args) {
int[] numbers = {2,3,1,0,2,5,3} ;
int lenth = 7;
int duplication = 0;
NO03A no03A = new NO03A();
System.out.println(no03A.duplicate(numbers, lenth, duplication));
}
}
class NO03A{
public boolean duplicate(int[] numbers, int lenth, int duplication){
if(numbers == null || lenth <= 0){
return false;
}
for(int i = 0; i < lenth; i++){
if(numbers[i] < 0 || numbers[i] >= lenth){
return false;
}
}
for(int i = 0; i < lenth; i++){
while(numbers[i] != i){
if(numbers[i] == numbers[numbers[i]]){
duplication = numbers[i];
return true;
}
else{
int temp = numbers[i];
numbers[i] = numbers[temp];
numbers[temp] = temp;
}
}
}
return false;
}
}
解决的这个问题的思路是排序
由于数组是一种占据连续内存并且按照顺序存储的数据结构,根据下标在O(1)时间读/写数组中的任何数据。用数组来实现简单的哈希表,数组的下表作为哈希表的key, 数组的下表对应的值作为哈希表的value
问题:既然在上一行声明了
int temp = numbers[i];
代码中可否将两个numbers[temp]用numbers[numbers[i]]代替?
答案是不行。