输入一个个数为n的数组,要求在不用额外空间的条件下找出在1~n中没有出现的元素。
Input: [4,3,2,7,8,2,3,1] Output: [5,6]参考discuss,由于数组下标和数组内容只相差1,通过将数组内容变成负数的方法,则未出现元素作为下标对应的内容仍为正数
int len = nums.size();
for(int i=0; i<len; i++) {
int m = abs(nums[i])-1; // index start from 0
nums[m] = nums[m]>0 ? -nums[m] : nums[m];//内容为负数时依然保持
}
vector<int> res;
for(int i = 0; i<len; i++)
if(nums[i] > 0) res.push_back(i+1);
return res;