表中每个元素的范围为1~n,所以将每个元素k交换至对应下标k-1的位置;最后再将所有不在位置上的元素加入ans数组即可
代码class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> ans;
for(int i=0;i<nums.size();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<nums.size();i++)
{
if(nums[i]!=i+1)
ans.push_back(nums[i]);
}
return ans;
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)