题目粗心

给定N天中每一天的骑行间隔,如果有E天的骑行间隔大于E,那么E就称之为艾丁顿数,请找出这个数字(尽可能大)

算法思路

既然要找到E的最大值,那么在每一天的骑行间隔大于N的时候,E获得最大值N,这也是E的初始值。咱们能够想到,(数组的下标值+1)其实就是第几天,那么将骑行的间隔逆序排序,这样对于骑行间隔大于(以后下标值+1)的地位,就是E的一个可能取值(E取下标值+1),咱们为了获得最大值就是一直往右挪动,晓得第一次呈现骑行间隔小于等于以后下标值+1的地位,那么其右边就是E的最大值.

提交后果

AC代码

#include<cstdio>#include<algorithm>#include<unordered_set>#include<vector>using namespace std;bool cmp(int a,int b){    return a>b;}int main() {    int n;    scanf("%d",&n);    int num[n];    for(int i=0;i<n;++i){        scanf("%d",&num[i]);    }    sort(num,num+n,cmp);    int E = n;// 没有解的时候,E为n    for(int i=0;i<n;++i){        if(num[i]<=i+1){            E = i;            break;        }    }    printf("%d\n",E);    return 0;}