//solution1
/**
//references:https://www.cnblogs.com/grandyang/p/6209746.html
*/
class Solution1{
public:
vector<int> findDuplicates(vector<int>& nums){
vector<int> res;
for(int i = 0; i < nums.size(); i++){
int idx = abs(nums[i])-1;
if(nums[idx] < 0) res.push_back(idx+1);
nums[idx] = -nums[idx];
}
return res;
}
};
class Solution2{
public:
vector<int> findDuplicates(vector<int>& nums){
vector<int> res;
for(int i = 0; i < nums.size(); i++){
if(nums[i] != nums[nums[i]-1]){
swap(nums[i],nums[nums[i]-1]);
--i;
}
}
for(int i = 0; i < nums.size(); i++){
if(nums[i] != i+1) res.push_back(nums[i]);
}
return res;
}
};
class Solution3{
public:
vector<int> findDuplicates(vector<int>& nums){
vector<int> res;
int n = nums.size();
for(int i = 0; i < n; ++i){
nums[(nums[i]-1)%n] += n;
}
for(int i = 0; i < n; ++i){
if(nums[i] > 2*n) res.push_back(i+1);
}
return res;
}
};
怕什么真理无穷,进一寸有一寸的欢喜。---胡适
浙公网安备 33010602011771号