Number.287——尋找重複數

題目鏈接:https://leetcode-cn.com/problems/find-the-duplicate-number

給定一個包含 n + 1 個整數的數組 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重複的整數。假設只有一個重複的整數,找出這個重複的數。

輸入: [1,3,4,2,2]
輸出: 2

輸入: [3,1,3,4,2]
輸出: 3

兩種解題方法:

  1. 根據前面做題經驗知道,兩個相同的數異或的結果是0…所以可以遍歷兩次數組,如果出現異或爲0,就返回該數。時間複雜度O(n^2),顯然不是題目想考的。

重點介紹第二種解題方法:
仔細讀題發現,數組的長度比數字範圍大1,而數值範圍在1到n之間,且至少存在一個重複的整數。這意味着:可以把數組中的數字按照索引存儲起來,如果遇到重複的數字,就判斷該索引處是否已經有值,有的話就是重複數字

class Solution {
    public int findDuplicate(int[] nums) {
        int len = nums.length;
        int i = 0;
        while(i < len){
            if (nums[i] == i){
                i++;
                continue;
            }
            if (nums[nums[i]] == nums[i]) return nums[i];
            int tmp = nums[i];
            nums[i] = nums[tmp];
            nums[tmp] = tmp;
        }
        return 0;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章