题目大意:大小为n的数组中,每个数满足1≤a[i]≤n,有些元素出现了两次,有些元素出现了一次,找到重复数字。要求时间复杂度O(n),空间复杂度O(1)。
分析:和leetcode448类似。遍历数组的过程中标记相反数,当要标记位置的数值已经为负时,就说明该位置代表的数字已经出现过
代码:
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> ans;
for(int i = 0;i < nums.size();i++){
if(nums[abs(nums[i]) - 1] > 0)
nums[abs(nums[i]) - 1] *= -1;
else ans.push_back(abs(nums[i]));
}
return ans;
}
};