自己的思路1:hash 空间O(n)
hash,先把nums中的元素放到unordered_set中,然后从1到n遍历看哪个不在unordered_set中就放到ans中。
优化:hash 空间优化到O(1)题目要求的
具体思路: 用原数组作hash,使用负号标记法
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
vector<int> ans;
int n = nums.size();
for (int i = 0; i < n; ++i) {
if (nums[abs(nums[i]) - 1] > 0) nums[abs(nums[i]) - 1] = -nums[abs(nums[i]) - 1];
}
for (int i = 0; i < n; ++i) {
if (nums[i] > 0) ans.push_back(i + 1);
}
return ans;
}
};
难点: 加个判断就不会重复标记了
if (nums[abs(nums[i]) - 1] > 0)