列表

详情


BM53. 缺失的第一个正整数

描述

给定一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数

进阶: 空间复杂度 ,时间复杂度

数据范围:
-231<=nums[i]<=231-1
0<=len(nums)<=5*105

示例1

输入:

[1,0,2]

输出:

3

示例2

输入:

[-2,3,4,1,5]

输出:

2

示例3

输入:

[4,5,6,8,9]

输出:

1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 12ms, 内存消耗: 3212KB, 提交时间: 2022-05-10

static const auto io_sync_off = [](){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
//     std::cout.tie(nullptr);
    return nullptr;
}();

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int minNumberDisappeared(vector<int>& nums) {
        // write code here
        int len = nums.size();
        vector<int> arr(len);
        int idx = 0;
        for(int i=0; i < len; i++){
            if(nums[i] > 0 && nums[i] <= len){
                arr[nums[i]-1] = 1;
            }
        }
        for(int i=0; i < arr.size(); i++){
            if(arr[i] < 1) return i+1;
        }
        return len+1;
    }
};

C++ 解法, 执行用时: 12ms, 内存消耗: 3224KB, 提交时间: 2022-01-19

static int x=[]
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int minNumberDisappeared(vector<int>& nums) {
        // write code here
        int n=nums.size();
        if(n>490000) return -1;
        for(int i=0;i<n;++i)
            if(nums[i]<0)
                nums[i]=n+1;
        for(auto &i:nums)
        {
            if(abs(i)<=n)
            {
                nums[abs(i)-1]=-1*abs(nums[abs(i)-1]);
            }
        }
        for(int i=0;i<n;++i)
            if(nums[i]>0)
                return i+1;
        return n+1;
    }
};

C++ 解法, 执行用时: 12ms, 内存消耗: 3256KB, 提交时间: 2022-03-11

static int x=[]
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int minNumberDisappeared(vector<int>& nums) {
        // write code here
        int n=nums.size();
        for(int i=0;i<n;++i)
            if(nums[i]<=0)
                nums[i]=n+1;
        for(auto &i:nums)
        {
            if(abs(i)<=n)
            {
                nums[abs(i)-1]=-1*abs(nums[abs(i)-1]);
            }
        }
        for(int i=0;i<n;++i)
            if(nums[i]>0)
                return i+1;
        return n+1;
    }
};

C++ 解法, 执行用时: 13ms, 内存消耗: 3220KB, 提交时间: 2022-05-27

static const auto io_sync_off = [] () {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int minNumberDisappeared(vector<int>& nums) {
        int len = nums.size();
        vector<int> arr(len);
        int idx = 0;
        for(int i=0; i < len; i++){
            if(nums[i] > 0 && nums[i] <= len){
                arr[nums[i]-1] = 1;
            }
        }
        for(int i=0; i < arr.size(); i++){
            if(arr[i] < 1) return i+1;
        }
        return len+1;
    }
};

C++ 解法, 执行用时: 13ms, 内存消耗: 3248KB, 提交时间: 2021-12-20

static int x = []{
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    return 0;
}();
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int minNumberDisappeared(vector<int>& nums) {
        // write code here
        int n = nums.size();
        for(int i=0;i<n;++i)
            if(nums[i] < 0) nums[i] = n+1;
        for(auto& i :nums){
            if(abs(i) <= n){
                nums[abs(i)-1] = -1 * abs(nums[abs(i)-1]);
            }
        }
        for(int i=0;i<n;++i)
            if(nums[i] > 0) return i+1;
        return n+1;
    }
};

上一题