数组里找缺失数字
数组中因为重复导致,缺失多个数值。
如:[1, 2, 2] 缺失[3],目标是包含[1:n.size()]。缺失多个原地标记
//leetcode448
vector<int> findDisappearedNumbers(vector<int>& nums) {
vector<int> res;
for(int i = 0; i < nums.size(); ++i){
int index = abs(nums[i])-1;//要abs,因为可能是负数
nums[index] = -abs(nums[index]);//要abs,因为可能出现多次
}
for(int i = 0; i < nums.size(); ++i){
if(nums[i] > 0)
res.push_back(i+1);
}
return res;
}
数组中只缺失一个数
如:[0,2]缺失[1],目标是包含[0:n.size()],缺失一个可以用异或。
int missingNumber(vector<int>& nums) {
int res = 0;
for(int i = 0; i < nums.size(); ++i){
res ^= nums[i] ^ i;
}
return res^nums.size();
}