列表

详情


NC256. 数组里面没有出现过的数字

描述

给定一个长度为N的正整数数组nums,其中nums[i]的值都在区间[1,n]中,请你找出nums数组在[1,n]范围里面没有出现过的数字,并将它们放在数组里面返回(在数组里面的顺序可以不唯一)

注:本题有时间复杂度为O(n),空间复杂度为O(1)的解法,返回的数组不计入空间复杂度计算

数据范围:


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

上一题