最先冒出的简单想法就是,先生成区间,再一个一个删

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;
    }
};