Leetcode(每日一題) 448. 找到全部數組中消失的數字

題目數組

給定一個範圍在 1 ≤ a[i] ≤ n ( n = 數組大小 ) 的 整型數組,數組中的元素一些出現了兩次,另外一些只出現一次。markdown

找到全部在 [1, n] 範圍之間沒有出如今數組中的數字。app

您能在不使用額外空間且時間複雜度爲O(n)的狀況下完成這個任務嗎? 你能夠假定返回的數組不算在額外空間內。ide

輸入:
[4,3,2,7,8,2,3,1]

輸出:
[5,6]

思路:
因爲nums 的數字範圍均在 [1,n]中,咱們能夠利用這一範圍以外的數字,來表達「是否存在」的含義。atom

具體來講,遍歷nums,每遇到一個數 x,就讓nums[x−1] 增長 n。因爲nums 中全部數均在[1,n] 中,增長之後,這些數必然大於 n。最後咱們遍歷nums,若 nums[i] 未大於n,就說明沒有遇到過數 i+1。這樣咱們就找到了缺失的數字。spa

代碼code

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        int n=nums.size();
        for(auto& i:nums){
            int x=(i-1)%n;
            nums[x]+=n;
        }
        vector<int > v;
        for(int i=0;i<n;i++){
            if(nums[i]<=n){
                v.push_back(i+1);
            }
        }
        return v;
    }
};
相關文章
相關標籤/搜索