C语言实现O(n)时间复杂度计算数组相邻元素最大差值

本文将介绍一种在O(n)时间复杂度内计算无序非负整数数组中相邻元素最大差值的方法,并提供C语言代码实现。

问题描述:

给定一个非负整数数组(无序),计算相邻数字的差异(指按从高到低排序后,前一名较后一名相差的最大值)。例如,数组{5, 10, 3, 8, 6},最大差异为 10 - 3 = 7

要求:

在O(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(n)。

空间复杂度:O(1)

代码只使用了一些常数大小的变量,所以空间复杂度为O(1)。

C语言实现O(n)时间复杂度计算数组相邻元素最大差值

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

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