劍指Offer : 面試題 3 - 數組中重複的數字
題目
找出數組中重複的數字
在一個長度爲 的數組裏的所有的數字都在 的範圍內. 數組中某些數字是重複的, 但不知道有幾個數字重複了, 也不知道每個數字重複了幾次. 請找出數組中任意一個重複的數字.
例,
輸入: {2, 3, 1, 0, 2, 5, 3}
輸出: 2 或 3
我的解法
思路一
創建一個長度爲 數組 aux
, 下標 表示數字 出現過的次數. 遍歷數組, 如果 aux[i]
的值不等於 0, 則返回當前數字.
時間複雜度:
空間複雜度:
public class Solution {
public int repeat(int[] nums) {
if (nums==null) { return -1; }
if (nums.length==1) { return -1; }
int[] aux = new int[nums.length];
for (int current:nums) {
if (aux[current]!=0) {
return current;
} else {
aux[current]++;
}
}
return -1;
}
}
思路二
將數組排序, 然後遍歷數組.
時間複雜度:
空間複雜度:
public class Solution {
public int repeat(int[] nums) {
if (nums==null) { return -1; }
if (nums.length==1) { return -1; }
Arrays.sort(nums);
int current = nums[0];
for (int i=1; i<nums.length; i++) {
if (nums[i]==current) {
return current;
} else {
current = nums[i];
}
}
return -1;
}
}
Arrays.sort() 使用歸併排序, 時間複雜度 , 空間複雜度 .