题目链接:https://leetcode.cn/problems/find-all-duplicates-in-an-array/
思路如下:
含有 n n n 个整数,数组下标的大小在区间 [ 0 , n − 1 ] [0,n-1] [0,n−1] 内,数组元素的大小在区间 [ 1 , n ] [1, n] [1,n] 内,我们可以将元素映射到下标,以此来判断数字是否出现过。
假设当前元素是 x
,那么我们把第 x - 1
位置上的元素乘以 -1
,表示数字 x
出现过。
如果第 x - 1
位置上的元素已经是负数了,表示数字 x
已经出现过了,即为答案。
C++ 代码如下:
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> res;
for (auto x : nums) {
x = abs(x);
if (nums[x - 1] > 0) {
nums[x - 1] *= -1;
} else {
res.push_back(x);
}
}
return res;
}
};