有时我们会关心相邻名次间成绩的差异比如冠军与亚军差多少第四名与第五名差多少等等。编写函数计算模拟的成绩数组均为非负整数但是是无序的中相邻的名次间成绩的最大差异指按从高到低排序后前一名较后一名相差的最大值。显然排序后再统计是一种方法我们对时间效率有一定的要求:你能否在On的时间和空间复杂度下完成该任务?你可以认为数据数量少于2个时差异认为是0。用C语言编写以上程序输入样例:第一行是长度N第二行是N个
#include <stdio.h>
int fun(int D[], int N) {
// 当数据数量少于2个时,差异认为是0
if (N < 2) {
return 0;
}
// 初始化最大差异为0
int maxDiff = 0;
// 找出最大值和最小值
int maxVal = D[0];
int minVal = D[0];
for (int i = 1; i < N; i++) {
if (D[i] > maxVal) {
maxVal = D[i];
}
if (D[i] < minVal) {
minVal = D[i];
}
}
// 计算最大差异
int diff = maxVal - minVal;
if (diff > maxDiff) {
maxDiff = diff;
}
return maxDiff;
}
int main() {
int N;
scanf("%d", &N);
int D[N];
for (int i = 0; i < N; i++) {
scanf("%d", &D[i]);
}
int result = fun(D, N);
printf("%d\n", result);
return 0;
}
原文地址: http://www.cveoy.top/t/topic/jaVZ 著作权归作者所有。请勿转载和采集!