方式一 : 使用hashset
import java.util.*;
public class Solution {
public boolean duplicate(int numbers[],int length,int [] duplication) {
if(numbers == null || length <= 0) return false;
for(int i = 0 ; i < length ; i++){
if(numbers[i] < 0 || numbers[i] > length-1) return false;
}
HashSet<Integer> set = new HashSet<>();
for(int i = 0 ; i < length ; i++){
if(!set.add(numbers[i])){
duplication[0] = numbers[i];
return true;
}
}
return false;
}
}
方式二 :剑指offer思路:
如果第 numbers[i] 位的值和 i 不相等,那么就比较 numbers[numbers[i]]
比如{2,1,3,0,2,1}
遍历到第0位时: 值为2,2 != 0 ==》 比较2和第2位上的元素值: 2 != 3 ,那么交换2和3
如果相等,就找到了相同的元素
public class Solution {
public boolean duplicate(int numbers[],int length,int [] duplication) {
if(numbers == null || length <= 0) return false;
for(int i = 0 ; i < length ; i++){
if(numbers[i] < 0 || numbers[i] > length-1) return false;
}
for(int i = 0 ; i < length ; i++){
while(numbers[i] != i){
if(numbers[i] == numbers[numbers[i]]){
duplication[0] = numbers[i];
return true;
}
int temp = numbers[i];
numbers[i] = numbers[temp];
numbers[temp] = temp;
}
}
return false;
}
}