【LeetCode】287. 尋找重複數

在這裏插入圖片描述

直觀的思路,創建一個HashSet,遍歷數組,直到找到重複的那個數字。(違反了原題中額外空間的要求)

另尋他法。

在這裏插入圖片描述

class Solution {
    public int findDuplicate(int[] nums) {
        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            if(set.contains(num)){
                return num;
            }else {
                set.add(num);
            }
        }
        return 0;
    }
}
另一個思路是,這n+1個數,序號爲0,1,2…n,數的範圍在[1, n],至少有一個數重複。我遍歷數組,遍歷到某個數,我們獲取它的絕對值x,我去看看序號爲x的位置,如果x爲負值,我們就找到了重複的數爲x,如果不爲負值,說明我們是第一次遍歷到數x,我們將序號爲x的位置的數置爲相反數。

在這裏插入圖片描述

class Solution {
    public int findDuplicate(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            int num = Math.abs(nums[i]);// 這個位置的數字是num
            if (nums[num] < 0) {
                return num;
            } else {// 說明num這個數是第一次出現。
                nums[num] = -nums[num];
            }
        }
        return -1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章