数组中的符号标记法

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) {
        
        int len=nums.size();
        for(int i=0;i<len;i++){
            int m=abs(nums[i])-1;
            nums[m] = nums[m]>0? -nums[m]:nums[m];
        }
        
        vector<int>a1;
        
        for(int i=0;i<len;i++){
            if(nums[i]>0)
            a1.push_back(i+1);
        }
        return(a1);
    }
};

 

posted @ 2017-02-20 21:01  Madao东治  阅读(1071)  评论(0编辑  收藏  举报