<p>Given an array <code>nums</code> of <code>n</code> integers where <code>nums[i]</code> is in the range <code>[1, n]</code>, return <em>an array of all the integers in the range</em> <code>[1, n]</code> <em>that do not appear in</em> <code>nums</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> nums = [4,3,2,7,8,2,3,1]
<strong>Output:</strong> [5,6]
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> nums = [1,1]
<strong>Output:</strong> [2]
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>n == nums.length</code></li>
	<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= nums[i] &lt;= n</code></li>
</ul>

<p>&nbsp;</p>
<p><strong>Follow up:</strong> Could you do it without extra space and in <code>O(n)</code> runtime? You may assume the returned list does not count as extra space.</p>

class Solution {
public:
    std::vector<int> findDisappearedNumbers(std::vector<int>& nums) {
        
        std::vector<int> result(nums.size());
        for(int i = 0;i<nums.size();i++){
            result[i] = i+1;
        }
        int length = result.size();
        
        
        int id = 0;
        
        for(int i = 0;i<nums.size();i++){
            //std::cout << "Result\n";
            //for(int j = 0;j<result.size();j++) std::cout << result[j] << "\t";
            //std::cout << std::endl;
            //std::cout << "Number =" << nums[i] << "\n";
            
            bool isDeleted = deleteFromResultIfExist(nums[i],result);
            if (isDeleted) length--;
        }
        
        std::sort(result.begin(), result.end());
        
        result.erase(result.begin() + length, result.end());
        
        return result;
    }
    
private:
    bool deleteFromResultIfExist(int n,std::vector<int>& arr){
        if(n==arr[n-1]){
            arr[n-1] = arr.size()+1;
            return true;
        }
        
        return false;
    }

};
37650