leetcode最大间距(桶排序+Python)

虽然直接排完序,再求最大差值更快,这里我们还是学一下桶排序。

桶排序主要维护一个bucket,初始bucket【i】= 0,遍历nums,当i存在时,令bucket【i】= 1,表示存在。遍历完nums,bucket中有0,有1,再遍历bucket,如果是1,就加入ans列表中,最后ans中就是排完序的数组。

这题如果使用桶排序,还需要多考虑一层,因为nums【i】范围嘎嘎大。从数学上考虑,发现nums有n个数字,如果已知nums的最大值max和最小值min,那么可以推出最大间距d>=(max-min)//(n-1)。反证一下:如果每个间距d<(max-min)//(n-1),总共nums数组中排完序后x1,x2,....xn,应该有n-1个间距

max - min = Xn - X1 = Xn - Xn-1 + Xn-1 - Xn-2 + ..... X2 - X1 < max- min

有矛盾。综上:最大间距d>=(max-min)//(n-1)。

那么设置桶的宽度为d = (max-min)//(n-1),维护每个桶的最大值和最小值,那么最大间距的两个点Xi和 Xi-1,必然存在不同的桶t1和t2之间,并且最大间距 = t1最小值 - t2最大值。

class Solution:def maximumGap(self, nums: List[int]) -> int:MAX, MIN = max(nums), min(nums)n = len(nums)if n < 2: return 0ans = 0d = max(1, (MAX-MIN) // (n-1) )t = (MAX-MIN) // d + 1bucket = [[0, float('inf')] for _ in range(t)]for num in nums:idx = (num-MIN) // dbucket[idx] = [ max(bucket[idx][0], num), min(bucket[idx][1], num)]pre = -1for idx in range(t):if bucket[idx][0] == 0:continueif pre != -1:ans = max(ans, bucket[idx][1]- bucket[pre][0])pre = idxreturn ans

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组中第K大的数 | 快速排序+堆排序两种解法 | Python实现

原题链接 . - 力扣&#xff08;LeetCode&#xff09; 思路 快速排序思路 快速排序中有一个partition函数&#xff0c;作用是以当前子数组的第一个元素为哨兵&#xff0c;将小于它的元素移到它之前&#xff0c;大于它的元素移到它之后&#xff0c;最后返回哨兵的位置。哨兵的…

设备运行远程监控系统

在信息化、智能化的浪潮下&#xff0c;设备运行远程监控系统已经成为企业提升运营效率、降低运营成本、保障生产安全的重要工具。HiWoo Cloud作为设备运行远程监控系统&#xff0c;以其卓越的性能和稳定的运行&#xff0c;赢得了众多企业的青睐。 一、设备运行远程监控系统的概…

VSCode 配置 C/C++ 环境

1 安装 VSCode 直接去官网(https://code.visualstudio.com/)下载并安装即可。 2 配置C/C编译环境 方案一 如果是在Windows&#xff0c;需要安装 MingW&#xff0c;可以去官网(https://sourceforge.net/projects/mingw-w64/)下载安装包。 注意安装路径不要出现中文。 打开 w…

01 【哈工大_操作系统】x86_64 常用寄存器大全

在学习CPU底层技术的时候&#xff0c;难免会接触到各式各样的寄存器。尤其是在使用汇编语言编写操作系统时&#xff0c;寄存器更是必不可少的。因此&#xff0c;这篇文章将来详细聊聊 x86_64 架构中的所有寄存器&#xff0c;按照从 常用->不常用 的顺序来进行介绍。 首先&a…

出海企业必备:Zoho Desk打造高效海外工单管理体系!

出海工单系统和常见的工单系统相比有什么不同呢&#xff1f;工单系统主要事帮助售前或者售后人员记录、处理、跟踪客户需求&#xff0c;不仅有利于企业内部管理的规范化&#xff0c;还能够有效提高客户服务质量。 工单系统可以帮助出海企业搭建统一的订单管理、售后服务、甚至…

轮转数组(Leedcode)的题目

题目&#xff1a;给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步…

sql(ctfhub)

一.整数型注入 输入1 输入2 输入2-1&#xff0c;回显为1的结果&#xff0c;说明是数字型&#xff0c;只有数字型才可加减 判断字段数为2 查询数据库 查表 查列 显示flag内容 二.字符型注入 输入1 输入2 输入2-1&#xff0c;说明为字符型&#xff0c;不是数字型 判断闭合方式为…

一款支持串口、网口自定义协议的调试软件

ComMax通讯调试软件是一款支持自定义串口&#xff0c;网口通讯协议的调试软件&#xff0c;用户可以根据需要&#xff0c;自定义协议包&#xff0c;然后根据接受的数据选择要发送的数据包。是一款强大、好用的调试软件。 点击下载 提取码&#xff1a;wmfg 不用安装 下载解压即…

纠正对CAN的错误认识

STM32CUBEMX系列——CAN通讯的配置_stm32cubemx 配置103 can-CSDN博客 STM32之CAN通信_stm32 can通信-CSDN博客 在回环模式下&#xff0c;发送的数据帧会在控制器内部被立即接收&#xff0c;而不会通过总线传播到其他节点。这种模式可以确保在没有其他节点干扰的情况下&#…

插值与重采样在AI去衣技术中的关键作用

在人工智能&#xff08;AI&#xff09;的众多应用中&#xff0c;去衣技术作为一种新兴的图像处理技术&#xff0c;逐渐引起了广泛关注。这项技术不仅涉及复杂的计算机视觉和深度学习算法&#xff0c;还需要对图像处理中的插值与重采样技术有深入的理解。本文将详细探讨插值与重…

MySQL基础之单表操作(定义DDL,增删改DML,查DQL)

目录 一、概述1.1 什么是数据库1.2 连接MySQL1.3 数据模型1.4 SQL语句的分类1.5 数据类型 二、数据库设计-DDL2.1 数据库层面2.2 数据表层面创建表约束查询修改add,modify,change,drop,rename删除 三、数据库操作-DML3.1 添加数据insert3.2 修改数据update3.3 删除数据delete 四…

Learn ComputeShader 02 Multiple kernels

前面已经成功创建了第一个compute shader&#xff0c;并且使用它替换掉quad的材质的纹理&#xff0c;现在我们将要在计算着色器中创建多个kernel。 首先调整上次的计算着色器&#xff0c;让它显示为红色。 然后再次创建一个kernel&#xff0c;显示为黄色。 结果应该是这样的…