首页 > 编程语言 > 详细

leecode第四百四十八题(找到所有数组中消失的数字)

时间:2019-08-05 11:42:13      阅读:84      评论:0      收藏:0      [点我收藏+]

技术分享图片

class Solution {
public:
    
    vector<int> meathod1(vector<int>& nums) {
        vector<int> res;
        if(nums.empty()) 
            return nums;
        for(int i=0;i<nums.size();i++)
            nums[(nums[i]-1)%nums.size()]+=nums.size();//修改原数组,每个位置记录:当前位置是否出现过(如果出现过,每出现一次,就在该值上+n)
        
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]<=nums.size())//如果该值<=n,则代表每出现过
                res.push_back(i+1);
        }
        return res;
    }
    
    void swap(vector<int>& nums,int a,int b)
    {
        nums[a]=nums[a]^nums[b];
        nums[b]=nums[a]^nums[b];
        nums[a]=nums[a]^nums[b];
    }
    
    vector<int> meathod2(vector<int>& nums) {
        for(int i=0;i<nums.size();i++)//对每个位置,要求找到该位置本应该出现的值
        {
            while(nums[i]!=i+1&&nums[i]!=nums[nums[i]-1])//要么当前位置符合,要么对应位置符合,负责就换,为了节省空间只能异或换
                swap(nums,i,nums[i]-1);
            
        }
        
        vector<int> res;
        for(int i=0;i<nums.size();i++)//对于排序后不符合的值,记录
        {
            if(nums[i]!=i+1)
                res.push_back(i+1);
        }
        
        return res;
    }
    
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        
        return meathod1(nums);
    }
    
    
};

分析:

抽屉原理,不是第一次做了,但是还是很生。

leecode第四百四十八题(找到所有数组中消失的数字)

原文:https://www.cnblogs.com/CJT-blog/p/11301957.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!