442. 数组中重复的数据
原地哈希
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
int len = nums.size();
if(len <= 1) return vector<int>();
vector<int> ans;
for(int i = 0; i < len; i++) {
while(nums[nums[i] - 1] != nums[i]) {
swap(nums, nums[i] - 1, i);
}
}
for(int i = 0; i < len; i++) {
if(nums[i] == i + 1) {
continue;
}else {
ans.push_back(nums[i]);
}
}
sort(ans.begin(), ans.end());
return ans;
}
private:
void swap(vector<int>& nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
};