448. Find All Numbers Disappeared in an Array

FreeeLinux發表於2017-03-17
Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.

Find all the elements of [1, n] inclusive that do not appear in this array.

Could you do it without extra space and in O(n) runtime? You may assume the returned list does not count as extra space.

Example:

Input:
[4,3,2,7,8,2,3,1]

Output:
[5,6]

我們把所有出現過的數的位置設為負值,最後沒有出現過的位置就是正值。用三目運算子保證我們不會覆蓋未遍歷的值,僅僅將其設定為負值。

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        for(int i=0; i<nums.size(); ++i){
            int m = abs(nums[i]) - 1;
            nums[m] = nums[m] > 0 ? -nums[m] : nums[m];
        } 
        vector<int> res;   
        for(int i=0; i<nums.size(); ++i){
            if(nums[i] > 0)  
                res.push_back(i+1);
        }
        return res;
    }
};

相關文章