【LeetCode】41. 缺失的第一个正数

题目描述

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

  • 示例 1:
    输入: [1,2,0]
    输出: 3

  • 示例 2:
    输入: [3,4,-1,1]
    输出: 2

  • 示例 3:
    输入: [7,8,9,11,12]
    输出: 1

  • 说明:
    你的算法的时间复杂度应为 (mathcal{O}(n)),并且只能使用常数级别的空间。

我的解答

int firstMissingPositive(vector<int>& nums) {
    int n = nums.size();
    int max = 0;
    for (int i = 0; i < n; i++)
        if (nums[i] > max) max = nums[i];
    bool flags[max+2] = {false};
    for (int i = 0; i < n; i++) {
        int num = nums[i];
        if(num > 0) flags[num] = true;
    }
    if (n > 0) {
        for (int i = 1; i <= max+1; i++)
            if (!flags[i]) return i;
    } else
        return 1;
}
原文地址:https://www.cnblogs.com/4thirteen2one/p/9823688.html