#include <stdio.h>
const int N=300005;
int n, m, i, j, k, f[N];
int main(){
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        scanf("%d", &k);
        if(k < N) f[k]++;
    }//显然,答案在N以内,超出去的必用不到。
    for(i=0; i<m; i++){
        if(!f[i]) break;
    }
    printf("%d\n", i);
    return 0;
}

STL也可以:

#include <bits/stdc++.h>
int n, m, i, j, k;
std::map <int, int> f;
int main(){
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        scanf("%d", &k);
        f[k]++;
    }
    for(i=0; i<m; i++){
        if(!f[i]) break;
    }//贪心选择不同的最小数字,第一个未出现即答案
    printf("%d\n", i);
    return 0;
}

作者 crxis

发表回复