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