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;
}
相关推荐
小羊在睡觉20 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
sheeta199820 小时前
LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素
笔记·leetcode
_日拱一卒20 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
Bluetooth7301 天前
c语言一维数组
c语言
QiLinkOS1 天前
【从实验室到商业战场:发明专利如何重塑科技与企业的共生生态】
大数据·c语言·数据结构·c++·人工智能·单片机·算法
小白兔奶糖ovo1 天前
【Leetcode】231. 2的幂
linux·算法·leetcode
过期动态1 天前
【LeetCode 热题 100】接雨水
java·数据结构·算法·leetcode·职场和发展
一抹晴空1 天前
Keil MDK AC6 compiler编译报错,与AC5区别
c语言·arm开发·单片机
czhaii1 天前
单片机伺服电机加减速控制子程序
c语言·单片机
qq_333120971 天前
C++高并发内存池的整体设计和实现思路_C 语言
java·c语言·c++