面试题:无序数组排序后的最大相邻差
- 基础版本,先排序,再计算相邻差
// 排序,然后计算最大差值
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));
本文来自博客园,作者:struggle_time,转载请注明原文链接:https://www.cnblogs.com/songliquan/p/13152664.html
分类:
JavaScript
标签:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?