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