package main

import (
    "math"
)
/*
1.使用 map 标记所有数组中出现的数字
2.使用 maxNum 记录这些数字的最大值,这个是我们正整数遍历的上界
3.我们将 1-> maxNum 依次在 map 中判断是否缺失,如果缺失直接返回
4.如果 1->maxNum 都存在,那么第一个缺失的数字就是 maxNum+1
*/
func minNumberDisappeared( nums []int ) int {
    m, maxNum := make(map[int]bool, len(nums)), math.MinInt
    for _, v := range nums {
        m[v] = true
        maxNum = max(maxNum, v)
    }
    // if [1,maxNum] hit
    for i := 1; i <= maxNum; i++ {
        if _, ok := m[i]; !ok {
            return i
        }
    }
    // [1,maxNum] missing
    return maxNum+1
}

func max(a, b int) int { if a < b { return b }; return a }