zoukankan      html  css  js  c++  java
  • leecode第四百四十八题(找到所有数组中消失的数字)

    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);
        }
        
        
    };

    分析:

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

  • 相关阅读:
    JavaScript事件的几个细节
    CSS选择器从右向左的匹配规则
    JavaScript原型与继承
    CSS3制作ajax loader icon
    jQuery之.on()方法
    Special Resource Operator (SRO)
    openness configure dns server
    add dns items for coredns
    深入理解linux nat
    tcpdump for container
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/11301957.html
Copyright © 2011-2022 走看看