題目數組
給定一個範圍在 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; } };