其他分享
首页 > 其他分享> > 原地hash查重

原地hash查重

作者:互联网

https://leetcode.cn/problems/find-all-duplicates-in-an-array/
1.值域和变量相同空间映射

class Solution {
public:
    vector<int> findDuplicates(vector<int>& nums) {
        //原地hash
        vector<int> ans;
        for(int i=0;i<nums.size();i++){
            int t=nums[i];
            if(t<0 || t-1==i) continue;
            if(nums[t-1]==t){
                ans.emplace_back(t);
                nums[i]=-1; //t已经存在了
            }else{
                int c=nums[t-1];
                nums[t-1]=t;
                nums[i--]=c;
            }
        }
        return ans;
    }
};

2.不用swap,前提是值域为正

class Solution {
public:
    vector<int> findDuplicates(vector<int>& nums) {
        //原地hash,不swap(前提值域为正)
        vector<int> ans;
        for(int i=0;i<nums.size();i++){
            int t=abs(nums[i]);
            if(nums[t-1]<0){
                ans.emplace_back(t);
            }else{
                nums[t-1]=(-1)*nums[t-1];
            }
        }
        return ans;
    }
};

标签:查重,findDuplicates,hash,值域,原地,vector,ans
来源: https://www.cnblogs.com/rabbithacker/p/16255686.html