c语言编写:有时我们会关心相邻名次间成绩的差异比如冠军与亚军差多少第四名与第五名差多少等等。编写函数计算模拟的成绩数组均为非负整数但是是无序的中相邻的名次间成绩的最大差异指按从高到低排序后前一名较后一名相差的最大值。显然排序后再统计是一种方法我们对时间效率有一定的要求:你能否在On的时间和空间复杂度下完成该任务?你可以认为数据数量少于2个时差异认为是0。函数接口定义:int fun int Di
实现思路:
- 首先判断数组的长度是否小于等于1,如果是,则直接返回0。
- 定义一个变量max_diff来存储最大差异值,初始值为0。
- 遍历数组,从第二个元素开始,比较当前元素与前一个元素的差值abs(D[i]-D[i-1]),如果大于max_diff,则更新max_diff的值。
- 遍历完数组后,返回max_diff的值。
具体实现如下:
int fun(int D[], int N) {
if (N <= 1) {
return 0;
}
int max_diff = 0;
for (int i = 1; i < N; i++) {
int diff = abs(D[i] - D[i-1]);
if (diff > max_diff) {
max_diff = diff;
}
}
return max_diff;
}
时间复杂度:O(n) 空间复杂度:O(1)
原文地址: https://www.cveoy.top/t/topic/i9QN 著作权归作者所有。请勿转载和采集!