有时我们会关心相邻名次间成绩的差异比如冠军与亚军差多少第四名与第五名差多少等等。编写函数计算模拟的成绩数组均为非负整数但是是无序的中相邻的名次间成绩的最大差异指按从高到低排序后前一名较后一名相差的最大值。显然排序后再统计是一种方法我们对时间效率有一定的要求:你能否在On的时间和空间复杂度下完成该任务?你可以认为数据数量少于2个时差异认为是0。C语言编写程序输入样例:第一行是长度N第二行是N个以空格
思路:
- 首先判断数组长度是否小于2,如果小于2,则直接返回0。
- 定义两个变量max_diff和min_num,分别用来记录最大差异和当前最小的成绩。
- 遍历数组,对于每个成绩D[i],判断D[i]是否大于min_num,如果大于,则更新max_diff为max(max_diff, D[i]-min_num),否则更新min_num为D[i]。
- 遍历结束后,返回max_diff。
代码如下:
int fun(int D[], int N) {
if (N < 2) {
return 0;
}
int max_diff = 0;
int min_num = D[0];
for (int i = 1; i < N; i++) {
if (D[i] > min_num) {
max_diff = max(max_diff, D[i] - min_num);
} else {
min_num = D[i];
}
}
return max_diff;
}
原文地址: https://www.cveoy.top/t/topic/jb9n 著作权归作者所有。请勿转载和采集!