You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已按降序排序的数组如何求相邻元素最大差值?C代码问题求解

问题分析与代码修正

原代码存在3处核心错误:

  • 变量i未初始化就被用于计算初始max值,此时i为随机值,访问a[i]属于非法内存访问,会触发未定义行为
  • for循环边界设置错误,循环条件为i < n时,当i = n-1,i+1 = n超出数组合法下标范围(数组下标区间为0~n-1),会出现数组越界访问
  • abs函数的括号位置错误,原代码abs(a[i + 1] - a[i] > max)是对「差值是否大于max」的布尔判断结果取绝对值,逻辑完全错误,应该先对差值取绝对值再和max比较

修正后代码

void dif(int a[], int n) {
    // 边界处理:数组元素少于2个时无相邻差值
    if (n < 2) {
        printf("0\n");
        return;
    }
    int i, max;
    // 初始化i为0,取第一组相邻元素差值作为初始max
    i = 0;
    max = abs(a[i + 1] - a[i]);
    // 循环边界调整为i < n-1,避免i+1越界
    for (i = 0; i < n - 1; i++) {
        // 修正abs括号位置,先计算差值取绝对值再比较
        if (abs(a[i + 1] - a[i]) > max) {
            max = abs(a[i + 1] - a[i]);
        }
    }
    printf("%d\n", max);
}

可选优化

因为你已经提前将数组按降序排序,前一个元素必然大于等于后一个元素,相邻差值为非负数,可以直接去掉abs调用,用a[i] - a[i+1]计算差值即可,减少不必要的计算开销。

内容的提问来源于stack exchange,提问作者Waz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:57:03