[LeetCode]448. Find All Numbers Disappeared in an Array
题目描述
思路
使用map保存应该出现的数,然后遍历数组,把出现过的数在map中做标记,然后输入map中未被标记的数
代码
class Solution {
public:
vector<int> findDisappearedNumbers(
vector<int>& nums) {
vector<int> res = {};
unordered_map<int, int> normal;
for (
int i =
0; i < nums.size(); ++i){
normal[i +
1] =
1;
}
for (
int &p : nums){
normal[p] =
0;
}
for (
auto &p : normal){
if (p.second){
res.push_back(p.first);
}
}
return res;
}
};
思路 空间复杂度O(1)
对出现过的数标记为负,在对应位置上数字为正,则该数未出现,输出对应位置
代码
class Solution {
public:
vector<int> findDisappearedNumbers(
vector<int>& nums) {
vector<int> res = {};
for (
int i =
0; i < nums.size(); ++i){
int m =
abs(nums[i]) -
1;
nums[m] = nums[m] >
0 ? -nums[m] : nums[m];
}
for (
int i =
0; i < nums.size(); ++i) {
if (nums[i] >
0) {
res.push_back(i +
1);
}
}
return res;
}
};
转载请注明原文地址: https://ju.6miu.com/read-2669.html