Java教程

原地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;
    }
};

这篇关于原地hash查重的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!