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