題目
解題思路:
實現:時間複雜度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;
}