C语言实现O(n)时间复杂度计算相邻成绩最大差异
#include <stdio.h>
int fun(int D[], int N) { if (N < 2) { return 0; }
int maxDiff = 0;
int maxGrade = D[0];
for (int i = 1; i < N; i++) {
if (D[i] > maxGrade) {
maxGrade = D[i];
} else {
int diff = maxGrade - D[i];
if (diff > maxDiff) {
maxDiff = diff;
}
}
}
return maxDiff;
}
int main() { int D[] = {5, 3, 8, 2, 7}; int N = sizeof(D) / sizeof(D[0]); int result = fun(D, N); printf('Max difference: %d\n', result);
return 0;
}
该函数先判断数组中成绩的数量,如果少于2个,则直接返回0。然后定义一个变量maxDiff用来保存最大差异,初始化为0。另外定义一个变量maxGrade用来保存当前遍历过的最高成绩,初始化为数组的第一个成绩。
从数组的第二个成绩开始遍历,如果当前成绩大于maxGrade,则更新maxGrade为当前成绩。如果当前成绩小于等于maxGrade,则计算当前成绩与maxGrade的差异,如果差异大于maxDiff,则更新maxDiff为差异值。
最后返回maxDiff作为结果。
原文地址: https://www.cveoy.top/t/topic/hsHx 著作权归作者所有。请勿转载和采集!