[路飞]_leetcode-164-最大间距

简介: leetcode-164-最大间距

网络异常,图片无法展示
|


「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战


[题目地址][B站地址]


给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。


如果数组元素个数小于 2,则返回 0。


示例 1:


输入: [3,6,9,1]
输出: 3
解释: 排序后的数组是 [1,3,6,9]  ,  其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
复制代码


示例 2:


输入: [10]
输出: 0
解释: 数组元素个数小于 2,因此返回 0。
复制代码


说明:


  • 你可以假设数组中所有元素都是非负整数,且数值在 32 位有符号整数范围内。
  • 请尝试在线性时间复杂度和空间复杂度的条件下解决此问题。


解题思路


本题给出了信息:


  • 数组中所有元素都是非负整数
  • 数值在 32 位有符号整数范围内

给出了要求:

  • 在线性时间复杂度和空间复杂度的条件下解决此问题


因为本题要求的是数组排序之后的相邻元素之间的最大差值,所以我们要对输入数组进行排序。


而本题要求在线性时间复杂度和空间复杂度的条件下解决此问题,就说明我们算法的时间复杂度和空间复杂度都应该是 O(n) 的,而排序算法中时间复杂度为 O(n) 的我们可以想到 计数排序 和 基数排序。而这里题目给出的信息,数值是在 32 位有符号整数范围内,所以如果使用 计数排序,开的计数数组会很大,所以我们可以采用 基数排序 对输入数组进行排序,然后遍历排序后的结果,获取最大差值即可。


代码实现


// 获取低 16 位
function low16(num){
  return num & 0xffff
}
// 获取高 16 位
function high16(num){
  return (num & 0xffff0000) >> 16
}
var maximumGap = function (nums) {
  // 获取输入数组长度
  const len = nums.length;
  // 如果输入数组长度小于 2,直接返回 0
  if(len<2) return 0;
  // 创建计数数组
  const count = Array(65536).fill(0),
  // 创建 temp 数组存储低 16 位排序后的结果
    temp = Array(len)
  // 低十六位排序
  // 计数
  for(let i = 0;i<len;i++) count[low16(nums[i])]++
  // 求前缀和
  for(let i = 1;i<65536;i++) count[i] += count[i-1]
  // 归位
  for(let i = len-1;i>=0;i--) temp[--count[low16(nums[i])]] = nums[i]
  // 重置 count
  for (let i = 0; i < 65536; i++) count[i] = 0
  // 高十六位排序
  // 计数
  for(let i = 0;i<len;i++) count[high16(temp[i])]++
  // 求前缀和
  for(let i = 1;i<65536;i++) count[i] += count[i-1]
  // 归位
  for(let i = len-1;i>=0;i--) nums[--count[high16(temp[i])]] = temp[i]
  // 初始化结果值为 0
  let res = 0
  // 根据排序后的 nums 求最大间距
  for (let i = 1; i < len; i++) res = Math.max(res, nums[i] - nums[i - 1])
  // 返回结果值
  return res
}
复制代码


至此我们就完成了 leetcode-164-最大间距


如有任何问题或建议,欢迎留言讨论!👏🏻👏🏻👏🏻

相关文章
|
关系型数据库 MySQL PHP
分享96个PHP源码,总有一款适合您
分享96个PHP源码,总有一款适合您
756 3
IntelliJ IDEA - 复制文件全限定名快捷键
IntelliJ IDEA - 复制文件全限定名快捷键
1270 0
IntelliJ IDEA - 复制文件全限定名快捷键
|
存储 JSON Java
Java编程技巧之单元测试用例编写流程
立足于“如何来编写单元测试用例”,让大家“有章可循”,快速编写出单元测试用例。
Java编程技巧之单元测试用例编写流程
|
10月前
|
机器学习/深度学习 监控 自动驾驶
《告别低效!Vision Mamba改写图像视频处理规则》
Vision Mamba是一款创新的计算机视觉模型,采用双向状态空间模型(B-SSM)架构,大幅提升视频和图像数据处理的效率与精度。相比传统CNN和ViT,它通过序列化小块处理和时空扫描策略,捕捉全局信息和复杂依赖关系,计算复杂度仅为O(L log L),显著降低计算成本和内存占用。在高分辨率图像和视频处理中,Vision Mamba表现出色,广泛应用于自动驾驶、安防监控和医疗影像分析等领域。尽管尚处初级阶段,其潜力巨大,未来可结合量子计算等技术进一步拓展应用范围,为视觉信息处理带来革命性突破。
484 5
|
人工智能 物联网 Python
VMix:即插即用!字节联合中科大推出增强模型生成美学质量的开源适配器,支持多源输入、高质量视频处理
VMix 是一款创新的即插即用美学适配器,通过解耦文本提示和交叉注意力混合控制,显著提升图像生成的美学质量,支持多源输入和高质量视频处理。
560 11
VMix:即插即用!字节联合中科大推出增强模型生成美学质量的开源适配器,支持多源输入、高质量视频处理
|
安全 调度
什么是用户态和内核态?
【10月更文挑战第29天】用户态和内核态是操作系统中两个不同的运行级别和权限状态,它们相互配合,共同构成了操作系统的运行基础,为计算机系统的稳定运行和应用程序的高效执行提供了保障。
1685 31
|
机器学习/深度学习 存储 Linux
linux中强大且常用命令:find、xargs、grep
linux中强大且常用命令:find、xargs、grep
1045 9
|
安全 JavaScript Java
社区老人健康信息管理系统|基于springboot社区老人健康信息管理系统设计与实现(源码+数据库+文档)
社区老人健康信息管理系统|基于springboot社区老人健康信息管理系统设计与实现(源码+数据库+文档)
503 1
|
机器学习/深度学习 人工智能 算法
神经网络中的神经元和激活函数介绍
神经网络中的神经元和激活函数介绍
503 0
|
安全 开发工具 git
Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git
Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git
846 0