leetcode442——Find All Duplicates in an Array

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章