2022-5-8 每日一题-leetcode
作者:互联网
题目链接:https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/
个人题解:因为空间复杂度有限制,要使用常数的空间,因此只能在数组里转换。
根据题目要求,重复的数字是出现了2次。
因此,我们可以遍历数组,将下标 \(x\) 对应的数字 \(y\),找到 \(y\) 所对应的数字变成负数,如果发现了正数,说明反转了两次,因此就是答案。
代码:
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> res;
for(auto x:nums){
int p=abs(x)-1;
nums[p]=-nums[p];// 负数变正数,说明出现两次
if(nums[p]>0) res.push_back(abs(x));
}
return res;
}
};
运行结果:
标签:abs,nums,res,vector,2022,一题,正数,leetcode 来源: https://www.cnblogs.com/cytcnblogs/p/16245808.html