其他分享
首页 > 其他分享> > 2022-5-8 每日一题-leetcode

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;
    }
};

运行结果:

image

标签:abs,nums,res,vector,2022,一题,正数,leetcode
来源: https://www.cnblogs.com/cytcnblogs/p/16245808.html