注意严格大于,即边界问题。
#include<cstring>
#include<cstdio>
#define maxn 1001000
using namespace std;
int c[maxn] = {0};
int main() {
int N, a;
scanf("%d", &N);
memset(c, N + 1, 0);
for (int i = 0; i < N; i++) {
scanf("%d", &a);
if (a >= 0 && a <= N) {
c[a]++;
}
}
int t = 0;
for (int i = 0; i <= N; i++) {
t += c[i];
if (N - t >= i && N - (t + c[i + 1]) < i + 1) {
printf("%d\n", i);
return 0;
}
}
return 0;
}