编写函数计算数组均为非负整数但是是无序的中最大数字和第二大数字的差异指按从高到低排序后前一名较后一名相差的最大值。显然排序后再统计是一种方法我们对时间效率有一定的要求:你能否在On的时间和空间复杂度下完成该任务?你可以认为数据数量少于2个时差异认为是0。用C语言编写函数接口定义:int fun int Dint N ;
#include <stdio.h>
int fun(int D[], int N) {
if (N < 2) {
return 0;
}
int max = D[0];
int secondMax = D[0];
for (int i = 1; i < N; i++) {
if (D[i] > max) {
secondMax = max;
max = D[i];
} else if (D[i] > secondMax) {
secondMax = D[i];
}
}
return max - secondMax;
}
int main() {
int D[] = {3, 5, 2, 8, 1, 9, 7};
int N = sizeof(D) / sizeof(D[0]);
int diff = fun(D, N);
printf("Difference: %d\n", diff);
return 0;
}
该程序首先判断数组元素个数是否小于2,如果是,则直接返回0。然后,使用两个变量max和secondMax来记录最大和第二大的数字。遍历数组,如果当前元素大于最大值max,则更新secondMax为max,并更新max为当前元素;如果当前元素大于secondMax,则更新secondMax为当前元素。最后,返回max - secondMax作为结果。
原文地址: https://www.cveoy.top/t/topic/jcff 著作权归作者所有。请勿转载和采集!