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

分析:數組

抽屜原理,不是第一次作了,可是仍是很生。app

相關文章
相關標籤/搜索