C语言 | Leetcode C语言题解之第164题最大间距

题目:

题解:

cpp 复制代码
int maximumGap(int* nums, int numsSize) {
    if (numsSize < 2) {
        return 0;
    }
    int maxVal = INT_MIN, minVal = INT_MAX;
    for (int i = 0; i < numsSize; ++i) {
        maxVal = fmax(maxVal, nums[i]);
        minVal = fmin(minVal, nums[i]);
    }
    int d = fmax(1, (maxVal - minVal) / (numsSize - 1));
    int bucketSize = (maxVal - minVal) / d + 1;

    int bucket[bucketSize][2];
    memset(bucket, -1, sizeof(bucket));  // 存储 (桶内最小值,桶内最大值) 对,(-1, -1) 表示该桶是空的
    for (int i = 0; i < numsSize; i++) {
        int idx = (nums[i] - minVal) / d;
        if (bucket[idx][0] == -1) {
            bucket[idx][0] = bucket[idx][1] = nums[i];
        } else {
            bucket[idx][0] = fmin(bucket[idx][0], nums[i]);
            bucket[idx][1] = fmax(bucket[idx][1], nums[i]);
        }
    }

    int ret = 0;
    int prev = -1;
    for (int i = 0; i < bucketSize; i++) {
        if (bucket[i][0] == -1) continue;
        if (prev != -1) {
            ret = fmax(ret, bucket[i][0] - bucket[prev][1]);
        }
        prev = i;
    }
    return ret;
}
相关推荐
888CC++19 分钟前
C语言与C++的区别:从面向过程到面向对象
java·c语言·c++
库玛西3 小时前
C++ 运行时多态 :核心总结与原理图解
c语言·c++·笔记
橘子汽水1684 小时前
Leetcode 230,98:二叉搜索树中第K小的元素,验证二叉搜索树
算法·leetcode·职场和发展
天空'之城4 小时前
C 语言工业级通用组件手写 21:限幅消抖滤波
c语言·嵌入式算法·工业级组件·限幅消抖滤波
Aurorar0rua4 小时前
CS50 x 2024 Notes Algorithms - 07
c语言·开发语言·学习方法
神罚天下ET5 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
普通攻击往后拉7 小时前
Leetcode 448. 找到所有数组中消失的数字
算法·leetcode·职场和发展
mifengxing7 小时前
LeetCode 189 轮转数组|3种解法拆解,从暴力到O(1)原地最优解
数据结构·算法·leetcode
noipp8 小时前
推荐题目:洛谷 P3726 [AHOI2017/HNOI2017] 抛硬币
c语言·数据结构·c++·算法·编程·洛谷·luogu
c238568 小时前
C/C++每日一练14
c语言·c++·算法