写在前面
- 思路分析
- 对数组从大到小排序
- 枚举天数day从1到n,当a[day] <= day时,ans = day-1即为最大的day
- 要么卡顿,要么满分
测试用例
input:
10
6 7 6 9 3 10 8 2 7 8
output:
6
ac代码
- 参考代码1:
小于等于号
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a>b;
}
int main()
{
int n;
scanf("%d", &n);
vector<int> v(n+1);
for(int i=1; i<=n; i++)
scanf("%d", &v[i]);
sort(v.begin()+1, v.end()+1,cmp);
for(int day = 1; day<=v.size(); day++)
if(v[day]<=day)
{
printf("%d", day-1);
break;
}
return 0;
}
- 参考代码2:
大于号
#include <iostream>
#include <algorithm>
using namespace std;
int a[1000000];
int main()
{
int n, e = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
sort(a, a+n, greater<int>());
while(e < n && a[e] > e+1) e++;
printf("%d", e);
return 0;
}
知识点小结
int a[maxn];
sort(a+1,a+n+1,cmp); //从大到小排序
// 从大到小排序
int a[1000000];
sort(a, a+n, greater<int>());