面试题:无序数组排序后的最大相邻差

  • 基础版本,先排序,再计算相邻差
// 排序,然后计算最大差值
function maxSortedNear(arr) {
    arr.sort((a, b) => a - b)

    let max = arr[0]
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] - arr[i - 1] > max) {
            max = arr[i] - arr[i - 1]
        }
    }
    return max;
}
let a = [12, 3, 34, 23, 12, 2, 123]
console.log(a.join(','));
console.log('maxSortedNear:', maxSortedNear(a));
  • 优化版,使用桶排序计算
//  优化版,使用桶排序统计最大最小值
function maxSortedNear2(arr) {

    let max = arr[0]
    let min = arr[0]
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] > max) {
            max = arr[i]
        }
        if (arr[i] < min) {
            min = arr[i]
        }
    }

    // 初始化桶
    let bucketNum = Math.floor((max - min) / arr.length) + 1; // 桶的数量
    let buckets = new Array(bucketNum)
    for (let i = 0; i < bucketNum; i++) {
        buckets[i] = {};
    }

    // 遍历数组,确定最大最小值
    for (let i = 0; i < arr.length; i++) {
        // 映射索引
        let index = Math.floor((arr[i] - min) / arr.length)

        let data = buckets[index]
        if (data.min === undefined || data.min > arr[i]) {
            data.min = arr[i];
        }
        if (data.max === undefined || data.max < arr[i]) {
            data.max = arr[i]
        }
    }
    // 遍历桶,找到最大差值
    let leftMax = buckets[0].max;
    let maxDistance = 0;
    for (let i = 1; i < buckets.length; i++) {
        if (buckets[i].max === undefined) {
            continue;
        }
        if (buckets[i].min - leftMax > maxDistance) {
            maxDistance = buckets[i].min - leftMax;
        }
        leftMax = buckets[i].max;
    }
    return maxDistance;
}
let b = [12, 3, 3, 32, 5, 5, 2, 222, 12, 42]
console.log(b.join(','));
console.log('maxSortedNear2:', maxSortedNear2(b));
console.log('maxSortedNear:', maxSortedNear(b));
console.log('maxSortedNear2:', maxSortedNear2(a));
posted @   struggle_time  阅读(244)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示