NC256. 数组里面没有出现过的数字
描述
示例1
输入:
[2,1,4,5,1,2]
输出:
[3,6]
说明:
数组长度为6,那么范围为[1,6],其中3和6没有在数组里面出现,返回[3,6]示例2
输入:
[1,1]
输出:
[2]
C++ 解法, 执行用时: 4ms, 内存消耗: 680KB, 提交时间: 2022-02-10
class Solution { public: /* 方法一:哈希 */ vector<int> findDisappearedNumbers1(vector<int>& nums) { vector<bool> hash(nums.size()+1, false); vector<int> res; for(auto i : nums) hash[i] = true; for(int i = 1; i <= nums.size(); ++i) if(!hash[i]) res.push_back(i); return res; } /* 方法二:基于交换 */ vector<int> findDisappearedNumbers(vector<int>& nums) { vector<int> res; for(int i = 0; i < nums.size(); ++i){ while(nums[i] != nums[nums[i] - 1]){ swap(nums[i], nums[nums[i] - 1]); } } for(int i = 0; i < nums.size(); ++i){ if(nums[i] != i + 1){ res.push_back(i + 1); } } return res; } };
C++ 解法, 执行用时: 5ms, 内存消耗: 640KB, 提交时间: 2022-01-24
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> findDisappearedNumbers(vector<int>& nums) { int length = nums.size(); nums.push_back(0); vector<int> res; for (int i = 0; i < length; ++i) { while (nums[i] != nums[nums[i]]) { std::swap(nums[i], nums[nums[i]]); } } for (int i = 1; i <= length; ++i) { if (nums[i] != i) { res.push_back(i); } } return res; } };
C++ 解法, 执行用时: 5ms, 内存消耗: 644KB, 提交时间: 2022-02-03
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> findDisappearedNumbers(vector<int>& nums) { // write code here vector<int> result; int l=nums.size(); sort(&nums[0],&nums[0]+l); int h=nums[0]-1; while(h>0) { result.push_back(h); h--; } for(int i=0;i<l-1;i++) { if(nums[i+1]-nums[i]>1) { int n=nums[i+1]-nums[i]-1; int a=nums[i]+1; while(n) { result.push_back(a); a++; n--; } } } while(l-nums[l-1]>0) { result.push_back(nums[l-1]+1); nums[l-1]++; } return result; } };
C++ 解法, 执行用时: 5ms, 内存消耗: 648KB, 提交时间: 2022-03-08
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型vector */ vector<int> findDisappearedNumbers(vector<int>& nums) { // write code here vector<int> res; //map<int,int> m; vector<bool> hash(nums.size()+1,false); int len=nums.size(); for(int i=0;i<len;i++) { //m.insert(make_pair(nums[i],1)); hash[nums[i]]=true; } for(int i=1;i<=len;i++) { /* map<int,int>::iterator pos=m.find(i); if(pos==m.end()) { res.push_back(i); } */ if(!hash[i]) { res.push_back(i); } } return res; } };
C 解法, 执行用时: 5ms, 内存消耗: 648KB, 提交时间: 2022-01-31
int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){ int* hash = malloc(sizeof(int) * (numsSize + 1)); memset(hash, 0 , sizeof(int) * (numsSize + 1)); int* res = malloc(sizeof(int) * numsSize); for (int i = 0; i < numsSize; i++) { hash[nums[i] - 1]++; } *returnSize = 0; for (int i = 0; i < numsSize; i++) { if (hash[i] == 0) { res[(*returnSize)++] = i + 1; } } return res; }