最先冒出的简单想法就是,先生成区间,再一个一个删
python实现(一)
class Solution:
def findDisappearedNumbers(self , nums: List[int]) -> List[int]:
# write code here
temp_list = [i for i in range(1, len(nums)+1)] # 生成完整区间
nums = set(nums) # 将要删除的数字去重
for j in range(len(temp_list)): # 将区间中要删除的数字都置为0即可
if temp_list[j] in nums:
temp_list[j] = 0
res = list(set(temp_list)) # 最后去重,再将0删掉,剩下的肯定是目标数组
res.remove(0)
return res
利用python的语法可以简洁化这个答案
python实现(二)
class Solution:
def findDisappearedNumbers(self , nums: List[int]) -> List[int]:
temp_list = set([i for i in range(1, len(nums)+1)])
nums = set(nums)
res = list(temp_list-nums) # 去掉区间中nums的数字
return res
c++实现
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
// write code here
int i;
set<int> temp;
vector<int> res;
for(i=1; i<=nums.size(); i++){
temp.insert(i); //创建这个[1,n]的区间
}
for(i=0; i<nums.size(); i++){
if(temp.find(nums[i]) != temp.end()){ //如果数字属于nums中,就从区间中删掉
temp.erase(nums[i]);
}
}
res.assign(temp.begin(), temp.end()); //将set中的数据放入res中
return res;
}
};