题目
解题思路:
实现:时间复杂度O(n),空间复杂度:O(1)
public Integer findDuplicateInArray(int[] array){
// 对参数进行判断
if (array == null || array.length == 0){
return null;
}
for(int i = 0;i < array.length;i ++){
if (array[i] < 0 || array[i] > array.length - 1){
return null;
}
}
for(int i = 0;i < array.length;i ++){
while (array[i] != i){
int num = array[i];
if(array[num] == num){
return num;
}
array[i] = array[num];
array[num] = num;
}
}
return null;
}
变形题目:
解法一:(辅助数组法)
代码实现:
public Integer findDuplicateInArray(int[] array){
// 数组为空或者数组没有元素
if (array == null || array.length == 0){
return null;
}
// 数组长度
int arrLen = array.length;
// 数组有元素但是元素的值不符合要求,数组的值要求在(1~n)
for (int i = 0;i < arrLen;i ++){
if (array[i] <= 0 || array[i] >= arrLen){
return null;
}
}
// 用辅助数组
int[] helpArr = new int[arrLen];
// 遍历原数组的每一个元素,将该元素的值作为辅助数组的下标,查看以该下标的辅助数组的值是否为0,不为0说明重复,否则将值写入辅助数组。
for (int i = 0;i < arrLen;i ++){
int arrValue = array[i];
if (helpArr[arrValue] != 0){
return arrValue;
}
helpArr[arrValue] = arrValue;
}
return null;
}