PAT 甲级1117 Eddington Number

1117 Eddington Number

British astronomer Eddington liked to ride a bike. It is said that in order to show off his skill, he has even defined an “Eddington number”, E – that is, the maximum integer E such that it is for E days that one rides more than E miles. Eddington’s own E was 87.

Now given everyday’s distances that one rides for N days, you are supposed to find the corresponding E (≤N).

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤105), the days of continuous riding. Then N non-negative integers are given in the next line, being the riding distances of everyday.

Output Specification:

For each case, print in a line the Eddington number for these N days.

Sample Input:

10
6 7 6 9 3 10 8 2 7 8

Sample Output:

6

逻辑题,关键是理清思路。累计 k 天骑行距离超过(大于) k,这个数值受到天数的限制。先将所有距离从大到小排序,从 0 开始检查,第 i 位表示目前为止一共 i+1天,距离一定要超过 i+1; v[i] > i+1 做判定条件,结果 e++ ;增加到 v[i] = i + 1v[i] < i+1 时退出循环,上一次循环结束后的 e 就是最大值。

时间复杂度 O(n),空间复杂度 O(n)

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	int n, e = 0;
	scanf("%d", &n);
	vector<int> v(n);
	for(int i = 0; i < n; ++i) 
		scanf("%d", &v[i]);
	sort(v.rbegin(), v.rend());
	while(e < n && v[e] > e+1) e++;
	printf("%d", e); 
	return 0;
}
测试点结果耗时内存
0答案正确4 ms512 KB
1答案正确4 ms512 KB
2答案正确4 ms364 KB
3答案正确35 ms808 KB
4答案正确4 ms608 KB
5答案正确5 ms384 KB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值