题目描述:
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
示例 1:
输入:nums = [4,3,2,7,8,2,3,1] 输出:[5,6]示例 2:
输入:nums = [1,1] 输出:[2]
方法一:标记法(C++代码)
分析:将所有正数减一作为数组下标,置对应数组值为负值。那么,仍为正数的位置下标加一即为(未出现过)消失的数字。
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) { //方法一:标记法
for(int i = 0; i < nums.size(); i++){
nums[abs(nums[i]) - 1] = -abs(nums[abs(nums[i]) - 1]); //注意加abs
}
vector<int> res;
for(int i = 0; i < nums.size(); i++){
if(nums[i] > 0){
res.push_back(i + 1);
}
}
return res;
}
};
时间复杂度:O(n)
空间复杂度:O(1)