劍指Offer : 面試題 3 - 數組中重複的數字

劍指Offer : 面試題 3 - 數組中重複的數字

題目

找出數組中重複的數字

在一個長度爲 nn 的數組裏的所有的數字都在 n1n-1 的範圍內. 數組中某些數字是重複的, 但不知道有幾個數字重複了, 也不知道每個數字重複了幾次. 請找出數組中任意一個重複的數字.

例,

​ 輸入: {2, 3, 1, 0, 2, 5, 3}

​ 輸出: 2 或 3

我的解法

思路一

創建一個長度爲 nn 數組 aux, 下標 ii 表示數字 ii 出現過的次數. 遍歷數組, 如果 aux[i] 的值不等於 0, 則返回當前數字.

時間複雜度: O(n)O(n)

空間複雜度: O(n)O(n)

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;
  }
}
思路二

將數組排序, 然後遍歷數組.

時間複雜度: O(nlogn)O(n\log n)

空間複雜度: O(n)O(n)

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() 使用歸併排序, 時間複雜度 O(nlogn)O(n\log n), 空間複雜度 O(n)O(n).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章