Leetcode::find all duplicates in an array

Problem Description

How to solve

Big O (Time, Space)

Code

Cycle Sort

class Solution {
public:
    vector<int> findDuplicates(vector<int>& nums) {
        int i = 0;
        while(i < nums.size()) {
            int correctPos = nums[i] - 1;
            if (nums[correctPos] != nums[i]) {
                swap(nums[correctPos], nums[i]);
            } else i++;
        }

        vector<int> ans;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] != i + 1) ans.push_back(nums[i]);
        }
        return ans;
    }
};

Mark in the input array

class Solution {
public:
    vector<int> findDuplicates(vector<int>& nums) {
        vector<int> ans;
        for(auto num : nums) {
            int id = abs(num) - 1;
            if (nums[id] < 0) ans.push_back(abs(num));
            else {
                nums[id] *= -1;
            }
        }
        return ans;
    }
};