1. 程式人生 > >缺失的第一個正數

缺失的第一個正數

題目描述

給定一個未排序的整數陣列,找出其中沒有出現的最小的正整數。

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