LeetCode[164]最大间距

news2024/12/28 20:59:19

难度:Hard

题目:

给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。

您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。


示例 1:

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

 示例 2:

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

提示:

  • 1 <= nums.length <= 105
  • 0 <= nums[i] <= 109

Related Topics

  • 数组
  • 桶排序
  • 基数排序
  • 排序

重点!!!解题思路

明确解题手段:题中要求使用线性的时间来解决这道题,想要排序这个数组,我们前面练习的排序方法时间复杂度都达不到此题的标准:

那么这道题我们来使用基数排序--基数排序科普:

源码+讲解:

    class Solution {
        public int maximumGap(int[] nums) {
            int[] temp = new int[nums.length];  //创建一个temp数组用于拷贝
            int[] cnt = new int[65536];  //65536 是因为这是 16 位二进制表示的所有可能值的数量,范围从 0 到 65535
            //低16位处理
            for (int x : nums) cnt[x & 0xffff] += 1;  //对每个数的低16位出现的次数进行处理
            for (int i = 1; i < 65536; i++) cnt[i] += cnt[i - 1];  //对cnt进行前缀和处理
            for (int i = nums.length - 1; i >= 0; i--) temp[--cnt[nums[i] & 0xffff]] = nums[i];  //需要从后向前遍历保证基数排序的稳定性,这样前缀和的值所对应的就是当前元素应该在的下标位置
            //初始化
            Arrays.fill(cnt, 0);  //对高16位进行处理前,需要初始化cnt数组
            //高16位处理
            for (int x : temp) cnt[(x & 0xffff0000) >> 16] += 1;  //现在是对刚才排好序的temp进行高16位处理
            for (int i = 1; i < 65536; i++) cnt[i] += cnt[i - 1];
            for (int i = temp.length - 1; i >= 0; i--) nums[--cnt[(temp[i] & 0xffff0000) >> 16]] = temp[i];
            //结果处理
            int ans = 0;
            for (int i = 1; i < nums.length; i++) ans = Math.max(ans, nums[i] - nums[i - 1]);
            return ans;
        }
    }

运行结果:

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。

系列持续更新中,点个订阅吧,喜欢练习算法那就点个攒吧 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/868384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docsify gitee 搭建个人博客

docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm&#xff1a;1.2 在macOS上安装npm&#xff1a;1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html&#xff0c;定制化开发页面…

如何创造千亿项目?合法合规的绿色消费增值积分,或许能冲出赛道

电商行业的竞争越来越激烈&#xff0c;大部分的电商平台都面临着这三大难题&#xff1a;如何吸引用户、如何留存用户以及如何让用户为平台带来更多的效益。为了解决这三大问题&#xff0c;我们提出了创造千亿项目的商业模式——绿色消费增值积分系统&#xff0c;帮助企业冲出赛…

git 给仓库添加新分支并上传代码,git 克隆指定分支

git 克隆指定分支 git clone -b 分支名 仓库地址 例如&#xff1a; git clone -b dev https://gitee.com/UserGuan/spring-boot-demo.git git 给仓库添加新分支并上传代码 1、初始化仓库 git init 2、创建分支并命名 git checkout -b 分支名 例如&#xff1a; git che…

分布式应用:Zabbix监控Nginx

目录 一、理论 1.Zabbix监控Nginx 二、实验 1.Zabbix监控Nginx部署 三、问题 1.重启zabbix客户端失败 2.zabbix服务端测试客户端nginx状态失败 3.nginx启动失败 4.权限不够 一、理论 1.Zabbix监控Nginx &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.1…

从零构建深度学习推理框架-7 计算图的表达式

什么是表达式 表达式就是一个计算过程,类似于如下&#xff1a; output_mid input1 input2 output output_mid * input3用图形来表达就是这样的。 但是在PNNX的表达式&#xff08;Experssion Layer&#xff09;中不是这个样子&#xff0c;而是以一种抽象得方式&#xff0c;…

1.阿里云对象存储OSS

1.对象存储概述 文件上传&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上&#xff0c;可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛&#xff0c;我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务&#xff0c;需要有存储的支持…

山西电力市场日前价格预测【2023-08-13】

日前价格预测 预测明日&#xff08;2023-08-13&#xff09;山西电力市场全天平均日前电价为351.64元/MWh。其中&#xff0c;最高日前电价为404.00元/MWh&#xff0c;预计出现在19: 30。最低日前电价为306.39元/MWh&#xff0c;预计出现在13: 15。 价差方向预测 1&#xff1a; 实…

【vue3】vue3中父子组件传参:

文章目录 一、父传子&#xff1a;二、父调用子方法&#xff1a;三、子组件发送emit方法给父组件&#xff1a; 一、父传子&#xff1a; 【1】父组件传值&#xff1a; 【2】子组件接收&#xff1a; 二、父调用子方法&#xff1a; 【1】父组件调用&#xff1a; 【2】子组件暴…

C++ 学习系列 二 -- RAII 机制

一 什么是 RAII &#xff1f; RAII &#xff08;Resource Acquisition Is Initialization&#xff09;是由c之父Bjarne Stroustrup提出的&#xff0c;中文翻译为资源获取即初始化&#xff0c; 其含义是&#xff1a;用局部对象来管理资源的技术&#xff0c;这里所说的资源指的是…

【杨辉三角的两种解法——(超级详细)】

杨辉三角 1.杨辉三角简介&#x1f575;️ 杨辉三角&#xff0c;是二项式系数在三角形中的一种几何排列。在欧洲&#xff0c;这个表叫做帕斯卡三角形。帕斯卡&#xff08;1623----1662&#xff09;是在1654年发现这一规律的&#xff0c;比杨辉要迟393年&#xff0c;比贾宪迟600…

Python 11道字典练习题

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 有字典 dic {“k1”: “v1”, “k2”: “v2”, “k3”: “v3”}&#xff0c;实现以下功能&#xff1a; 1、遍历字典 dic 中所有的key 参考答案&#xff1a; dic {k1: v1,k2:v2,k3:v3}for k in dic.keys():print(k)2、遍历…

【高阶数据结构】AVL树详解(图解+代码)

文章目录 前言1. AVL树的概念2. AVL树结构的定义3. 插入&#xff08;仅仅是插入过程&#xff09;4. 平衡因子的更新4.1 为什么要更新平衡因子&#xff1f;4.2 如何更新平衡因子&#xff1f;4.3 parent更新后&#xff0c;是否需要继续往上更新&#xff1f;4.4 平衡因子更新代码实…

【最全Kubernetes容器编排安装教程】

文章目录 环境准备主机间做信任使用ssh-copy-id命令实现免密登录的安装与配置1. 安装Git Bash软件2. 生成公钥3. SSH登录Linux服务器4. 公钥复制到Linux服务器5. SSH免密登录测试 安装ansible工具 升级内核版本使用elrepo源升级内核查看最新版内核安装最新的内核版本设置系统默…

C语言的链表的相关操作

本变博客源于自己想复习一下C语言&#xff0c;所以便自己动手复习了一下链表的相关操作。做个人记录使用。 main.c #include <stdio.h> #include "list.h"int main() {student *a;printf("hello world\n") ;printf("----初始化列表----------\…

阻塞队列的安全实现,定时器的安全实现(面试易考),超详细

一、&#x1f49b; 如何实现一个线程安全的阻塞队列 目前&#xff0c;当前代码是循环队列&#xff08;还没有进行改动&#xff09; head和tail的判空判断满两种方法: 1.浪费一个格子&#xff0c;当前走到head的前一个位置&#xff0c;就认为队列满的 2.单独搞一个变量&#xff…

【分布式系统】聊聊分布式事务中原子性

什么是分布式事务 在分布式系统中&#xff0c;一个是计算问题&#xff0c;也就是将多个任务&#xff0c;通过流控技术把不同的流量分发给不同的服务器进行处理。另一个就是存储&#xff0c;而只要设计的存储&#xff0c;就必然会引入从单体事务中衍生除的分布式事务问题。 事务…

css flex 上下结构布局

display: flex; flex-flow: column; justify-content: space-between;

战略方法论

父文章 人人都是战略家 2018年注册会计师公司战略与风险考点:swot分析_知识点_注册会计师 SWOT分析 一、基本原理 所谓SWOT分析&#xff0c;即基于内外部竞争环境和竞争条件下的态势分析&#xff0c;就是将与研究对象密切相关的各种主要内部优势、劣势和外部的机会和威胁等…

提高WordPress网站性能的24个技巧

你想加速你的WordPress网站吗&#xff1f;快速加载页面可改善用户体验、增加页面浏览量并帮助你优化WordPress SEO。在本文中&#xff0c;我们将分享最有用的WordPress网站性能速度优化技巧&#xff0c;以提高WordPress网站性能并加快你的网站速度。 与其他“X 优秀的 WordPres…

redis学习笔记(九)

文章目录 python对redis基本操作&#xff08;1&#xff09;连接redis&#xff08;2&#xff09;数据类型操作 python对redis基本操作 &#xff08;1&#xff09;连接redis # 方式1 import redisr redis.Redis(host127.0.0.1, port6379) r.set(foo, Bar) print(r.get(foo))# …