原题链接:442. 数组中重复的数据
solution:
哈希表:空间复杂度O(n)
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> res;
unordered_map<int,int> hash;
for(auto &x : nums) {
hash[x]++;
if(hash[x] == 2) res.push_back(x);
}
return res;
}
};
由于nums中的元素值为1~n,因此可以遍历数组将对应nums元素值位置的元素乘-1,当第二次遍历到这个数的时候一定为负数,保存答案
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> res; //定义返回值
for(int i = 0;i < nums.size();i++) {
int index = abs(nums[i]);
if(nums[index - 1] > 0) {
nums[index - 1] *= -1;
}
else res.push_back(index);
}
return res;
}
};