有时我们会关心相邻名次间成绩的差异比如冠军与亚军差多少第四名与第五名差多少等等。编写函数计算模拟的成绩数组均为非负整数但是是无序的中相邻的名次间成绩的最大差异指按从高到低排序后前一名较后一名相差的最大值。显然排序后再统计是一种方法我们对时间效率有一定的要求:你能否在On的时间和空间复杂度下完成该任务?你可以认为数据数量少于2个时差异认为是0。用C语言编上程序
以下是用C语言编写的程序:
#include <stdio.h>
int maxDifference(int arr[], int n) {
if (n < 2) {
return 0;
}
int maxDiff = 0;
int minVal = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > minVal) {
int diff = arr[i] - minVal;
if (diff > maxDiff) {
maxDiff = diff;
}
} else {
minVal = arr[i];
}
}
return maxDiff;
}
int main() {
int arr[] = {5, 8, 3, 2, 10, 6};
int n = sizeof(arr) / sizeof(arr[0]);
int maxDiff = maxDifference(arr, n);
printf("最大差异: %d\n", maxDiff);
return 0;
}
该程序中,maxDifference函数接受一个整数数组和数组长度作为参数,返回相邻名次间成绩的最大差异。程序中使用了一个变量maxDiff来记录当前的最大差异,一个变量minVal来记录当前最小的成绩。遍历数组时,如果当前成绩大于最小成绩,计算差异并更新最大差异值;如果当前成绩小于等于最小成绩,更新最小成绩。最后返回最大差异值。
在main函数中,定义了一个测试数组arr,并通过sizeof运算符获取数组长度,然后调用maxDifference函数计算最大差异并输出结果。
原文地址: https://www.cveoy.top/t/topic/jcaB 著作权归作者所有。请勿转载和采集!