【leetcode】448. Find All Numbers Disappeared in an Array(easy,配列下付きと値のテクニック)

4186 ワード

// 448. Find All Numbers Disappeared in an Array
vector<int> findDisappearedNumbers(vector<int>& nums)
{
	//       on   ,       O(n)   O(1) ,       ,       
	//            ,       index          ,              
	// [ 4, 3, 4, 2] -> [0, 1, 1, 1]      [-, +, +, +]        ,  index            
	for (int i = 0; i < nums.size(); ++i)
	{
		int m = abs(nums[i]) - 1;
		nums[m] = nums[m] > 0 ? -nums[m] : nums[m]; //    -    

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