尋找重複數

尋找重複數

給定一個包含 n + 1 個整數的數組 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重複的整數。假設只有一個重複的整數,找出這個重複的數。
說明:
不能更改原數組(假設數組是隻讀的)。
只能使用額外的 O(1) 的空間。
時間複雜度小於 O(n^2) 。
數組中只有一個重複的數字,但它可能不止重複出現一次。
思路:

法1:

我的思路是先排序,然後使用快慢指針,時間和空間複雜度都能夠滿足,但是改變了原數組。

public static int findDuplicate(int[] nums) {
        Arrays.sort(nums);
        int i=0,c=nums[0];
        for (int j=1;j<nums.length;j++){
            if (nums[i]!=nums[j])
                i++;
            else {
                c=nums[i];
                break;
            }
        }
        return c;
    }

法2:

在數組上迭代時存儲每個元素,這樣就可以在迭代時簡單地檢查每個元素。
爲了實現線性時間複雜性,可以在迭代數組時把每個元素插入set集合seen中,並在每次迭代時檢查集合seen中是否包含重複的那個數字。

 public static int findDuplicate(int[] nums) {
        Set<Integer> seen = new HashSet<Integer>();
        for (int num : nums){
            if (seen.contains(num)){
                return num;
            }
            seen.add(num);
        }
        return -1;
    }

發佈了39 篇原創文章 · 獲贊 31 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章