#include <stdio.h>

int fun(int D[], int N) { if (N < 2) { return 0; }

int maxDiff = 0;
int maxScore = D[0];

for (int i = 1; i < N; i++) {
    int diff = maxScore - D[i];
    if (diff > maxDiff) {
        maxDiff = diff;
    }
    if (D[i] > maxScore) {
        maxScore = D[i];
    }
}

return maxDiff;

}

int main() { int N; scanf("%d", &N);

int D[N];
for (int i = 0; i < N; i++) {
    scanf("%d", &D[i]);
}

int result = fun(D, N);
printf("%d\n", result);

return 0;

}

问题描述:

有时,我们会关心相邻名次间成绩的差异,比如冠军与亚军差多少,第四名与第五名差多少等等。编写函数,计算模拟的成绩数组(均为非负整数,但是是无序的)中相邻的名次间成绩的最大差异(指按从高到低排序后,前一名较后一名相差的最大值)。显然,排序后再统计是一种方法,我们对时间效率有一定的要求:你能否在O(n)的时间和空间复杂度下完成该任务?你可以认为,数据数量少于2个时,差异认为是0。

输入样例:

第一行是长度N,第二行是N个以空格分隔的非负整数。

5
2 6 8 3 15

输出样例:

函数计算并返回有序化后,相邻的两名间最大的差异(第一名15,第二名8,差最大为7)。

函数接口定义:

int fun ( int D[],int N );

代码解释:

  1. 函数定义:

    • int fun(int D[], int N):该函数接收一个整数数组 D 和数组长度 N 作为输入,并返回相邻名次间成绩的最大差异。
  2. 边界条件判断:

    • if (N < 2) { return 0; }:如果数组长度小于 2,则返回 0,因为没有相邻名次。
  3. 初始化变量:

    • int maxDiff = 0;: 初始化最大差异为 0。
    • int maxScore = D[0];: 初始化最大成绩为数组的第一个元素。
  4. 遍历数组:

    • for (int i = 1; i < N; i++) { ... }: 从数组的第二个元素开始遍历,计算每个元素与当前最大成绩的差异。
  5. 更新最大差异:

    • int diff = maxScore - D[i];: 计算当前元素与最大成绩的差异。
    • if (diff > maxDiff) { maxDiff = diff; }: 如果当前差异大于最大差异,更新最大差异。
  6. 更新最大成绩:

    • if (D[i] > maxScore) { maxScore = D[i]; }: 如果当前元素大于最大成绩,更新最大成绩。
  7. 返回最大差异:

    • return maxDiff;: 返回最终计算出的最大差异。

代码示例:

#include <stdio.h>

int fun(int D[], int N) {
    if (N < 2) {
        return 0;
    }
    
    int maxDiff = 0;
    int maxScore = D[0];
    
    for (int i = 1; i < N; i++) {
        int diff = maxScore - D[i];
        if (diff > maxDiff) {
            maxDiff = diff;
        }
        if (D[i] > maxScore) {
            maxScore = D[i];
        }
    }
    
    return maxDiff;
}

int main() {
    int N;
    scanf("%d", &N);
    
    int D[N];
    for (int i = 0; i < N; i++) {
        scanf("%d", &D[i]);
    }
    
    int result = fun(D, N);
    printf("%d\n", result);
    
    return 0;
}
C语言编写:O(n)时间复杂度计算相邻名次成绩最大差异

原文地址: https://www.cveoy.top/t/topic/jwHu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录