題目大意:大小爲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;
}
};