用力戳我直达原题~
简单的贪心题目。降序。i值从最大遍历到1,当满足a[i] > i 的i值则是结果。(不能是a[i] >= i,因为题目要求是超过)
你想啊,例如遍历到i = 7时,a[7] > 7,也就是说第7天的骑车距离大于7,由于是降序,那么前6天的骑车距离肯定也大于等于a[7],那么i就是结果。
开始我还想用二分结果的方法,但由于排序用了O(nlogn),再来一个O(logn)已经没有意义,所以直接线性解决。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include <bits/stdc++.h> using namespace std; bool cmp(const int &a,const int &b){ return a>b;} int main() { int n, i, num[100010]; scanf( "%d" , &n); for (int i = 1; i <= n; i++) scanf( "%d" , num + i); sort(num + 1, num + n + 1, cmp); for (i = n; i >= 1; i--) { if (num[i] > i) { cout << i << endl; break ; } } if (i == 0) cout << 0 << endl; } |