表中每个元素的范围为1~n,所以将每个元素k交换至对应下标k-1的位置;最后再将所有不在位置上的元素加入ans数组即可
代码class Solution {
public:
vector findDuplicates(vector& nums) {
vector ans;
for(int i=0;i
int j=i;
while(nums[j]-1!=j&&nums[j]!=nums[nums[j]-1])
{
//互换nums[j] 和 nums[nums[j]-1]
int a=nums[nums[j]-1];
nums[nums[j]-1]=nums[j];
nums[j]=a;
}
}
for(int i=0;i
if(nums[i]!=i+1)
ans.push_back(nums[i]);
}
return ans;
}
};



