我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:
PAT-BASIC1060:https://pintia.cn/problem-sets/994805260223102976/problems/994805269312159744
PAT-ADVANCED1117:https://pintia.cn/problem-sets/994805342720868352/problems/994805354762715136
题目描述:
PAT-BASIC1060:
PAT-ADVANCED1117:
知识点:排序、二分搜索
思路:对数组排序,再根据这个数组计算出骑车超过i英里的天数
时间复杂度是O(NlogN)。空间复杂度是O(N)。
本题有一个坑点:
"有E天骑车超过E英里的最大整数E"应理解为"至少有E天骑车超过E英里的最大整数E"。如果理解为"刚好有E天骑车超过E英里的最大整数E",则无法通过测试点1、2、4和5。
C++代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int N;
scanf("%d", &N);
int nums[N];
for(int i = 0; i < N; i++){
scanf("%d", &nums[i]);
}
sort(nums, nums + N);
for(int i = nums[N - 1]; i >= 0; i--){
int index = upper_bound(nums, nums + N, i) - nums;
if(N - index >= i){
printf("%d\n", i);
break;
}
}
return 0;
}
C++解题报告: