无序数组计算排序后最大相邻差

news2024/11/24 20:09:38

如题目所示,给定数组[2,6,3,4,5,10,9],排序后的最大相邻差为9-6=3。想必你想到的方法是先运用冒泡或者快速排序,先将数组进行排序,然后循环求出来最大相邻差。这个时间复杂度为nlogn。
我们可以使用桶排序的方式计算最大相邻差,其中这个最大相邻差为右桶的最小值减去左桶的最大值。
桶的个数为数组的个数,桶的取值步长为(maxvalue-minvalue)/(len(array)-1)
形如
在这里插入图片描述
最大距离差为9min-6max=3

python 代码如下

class Bucket():
    def __init__(self) -> None:
        self.min = None
        self.max = None


def get_max_dinstinct(array: list = []):
    max_value = array[0]
    min_value = array[0]
    for i in range(0,len(array)):
        if array[i]>max_value:
            max_value=array[i]
        if array[i]<min_value:
            min_value=array[i]
            
    d = max_value-min_value
    if d==0:
        return 0
    # 初始化桶
    bucket_num = len(array)
    buckets = []
    for i in range(bucket_num):
        buckets.append(Bucket())
        
    # 遍历原始数组,确定每个桶的最大最小值
    for i in range(0,len(array)):
        # 确定数组元素所属的桶下表
        index = int((array[i]-min_value)*(bucket_num-1)/d)
        if buckets[index].min is None or array[i]<buckets[index].min:
            buckets[index].min = array[i]
        if buckets[index].max is None or array[i]>buckets[index].max:
            buckets[index].max = array[i]
    # 遍历桶计算最大距离
    left_max = buckets[0].max
    max_distinct = 0
    
    for _,value in enumerate(buckets):
        if value.min is None:
            continue
        if value.min-left_max>max_distinct:
            max_distinct = value.min-left_max
        left_max = value.max
        
    return max_distinct


print(get_max_dinstinct([2,6,5,4,3,10,9]))

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

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

相关文章

prettier代码格式化配置文件

项目默认配置文件 自定义配置文件

ubuntu系统开机黑屏(只显示logo、左上角光标闪烁)问题

问题背景 在使用pycharm的时候&#xff0c;我使用了pycharm的快捷键ctrlaltF7&#xff0c;结果进入了ubuntu的ttf界面&#xff0c;由于之前不知道这个东西&#xff0c;百度一顿乱搜&#xff0c;以为显卡驱动出问题了&#xff0c;就把驱动删了&#xff0c;其实我完全可以ctrlal…

[计算机入门] Windows附件程序介绍(游戏类)

3.16 Windows附件程序介绍(游戏类) 3.16.1 扫雷&#xff1a;MineSweeper.exe 扫雷是一款经典的单人益智游戏&#xff0c;最初于1990年代由微软公司首次发布在Windows操作系统上。它成为了Windows自带游戏程序的一部分&#xff0c;并广受欢迎。 游戏的目标是通过逻辑和推理&am…

跨考408的C语言需要什么水平?

跨考408的C语言需要什么水平? 其实C语言了解一下就可以了&#xff0c;复习之前可以在b站上面随便找个视频看一下&#xff0c;指针部分重点学习一下就 行&#xff0c;C语言主要是数据结构代码部分的基础&#xff0c;对于跨考生来说&#xff0c;先看一下C语言对数据结构的复习有…

Windows技巧

Windows应用 无限延长Windows10 自动更新时间 管理员身份打开cmd 输入以下代码 这里设置的是3000天&#xff0c;需要恢复更新可以将其设置为1天 reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings” /v FlightSettingsMaxPauseDays /t reg_dword…

理解一致性哈希算法

摘要&#xff1a;一致性哈希是什么&#xff0c;使用场景&#xff0c;解决了什么问题&#xff1f; 本文分享自华为云社区《16 张图解 &#xff5c; 一致性哈希算法》&#xff0c;作者&#xff1a;小林coding。 如何分配请求&#xff1f; 大多数网站背后肯定不是只有一台服务器…

2021年03月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 对于字典infor {“name”:“tom”, “age”:13, “sex”:“male”}&#xff0c;删除"age":13键值对的操作正确的…

06_Node.js服务器开发

1 服务器开发的基本概念 1.1 为什么学习服务器开发 Node.js开发属于服务器开发&#xff0c;那么作为一名前端工程师为什么需要学习服务器开发呢&#xff1f; 为什么学习服务器开发&#xff1f; 能够和后端程序员更加紧密配合网站业务逻辑前置扩宽知识视野 1.2 服务器开发可…

强制删除文件?正确操作方法分享!

“我昨天在删除文件时有个文件一直删除不掉。想用强制删除的方法来把它删掉&#xff0c;应该怎么操作呢&#xff1f;谁能教教我呀&#xff1f;” 在使用电脑的过程中&#xff0c;我们有时候可能会发现文件无论怎么删除都无法删掉&#xff0c;如果我们想要强制删除文件但不知道怎…

selenium-webdriver-Chrome新驱动地址(Chrome115及以上版本)

Chrome115、Chrome116、Chrome117&#xff0c;在旧的链接并没有 新地址&#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ 参考学习链接&#xff08;我也是根据这个老师的链接学到的&#xff09;&#xff1a;https://www.cnblogs.com/wuxianfeng023/p/1765…

JVM完整图文学习笔记(含拓展知识广度学习)第一章:内存结构

目录 内存结构 程序计数器 概述&#xff1a; 为什么私有化&#xff1f; 性能优化 安全性高 成本较低 为什么程序计数器不会存在内存溢出&#xff1f; 虚拟机栈 概述&#xff1a; 问题辨析&#xff1a; 垃圾回收是否涉及栈内存&#xff1f; 栈内存分配越大越好吗&#xf…

mariadb 错误日志中报错:Incorrect definition of table mysql.column_stats:

数据库错误日志出现此错误原因是因为系统表中字段类型或者数据结构有变动导致&#xff0c;一般是因为升级数据库版本后未同步升级系统表结构。 解决方法&#xff1a; 1.如果错误日志过大&#xff0c;直接删除。 2.执行 mysql_upgrade -u[用户名] -p[密码];&#xff0c;这一步…

计算机考研 | 2017年 | 计算机组成原理真题

文章目录 【计算机组成原理2017年真题43题-13分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2017年真题44题-10分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2017年真题43题-13分】 &#xff08;1…

南美巴西市场最全分析开发攻略,收藏一篇就够了

巴西位于南美洲东部&#xff0c;是南美洲资源最丰富&#xff0c;经济活力和经济实力最强的国家。巴西作为拉丁美洲的出口大国&#xff0c;一直是一个比较有潜力的市场&#xff0c;亦是我国外贸公司和独立外贸人集群的地方。中国长期是巴西主要的合作伙伴&#xff0c;2022年占巴…

探究IO多路复用select/poll/epoll的实现原理及优缺点

IO多路复用 多路指多个文件描述符&#xff0c;复用指使用一个线程。 IO多路复用通俗的理解就是一个线程监视多个文件描述符****&#xff0c;一旦某个文件描述符就绪&#xff0c;就通知应用程序对其进行读写操作。 select select会将三个fd_set文件描述符集合(bitMap),即读集…

java 汽车修理厂修配厂-接单-处理收款 日常经营管理系统 汽车修理信息管理

实现修配厂一体化管理&#xff0c;从业务各个环节整体管理&#xff0c;包括接待&#xff0c;维修&#xff0c;采购&#xff0c;质检&#xff0c;交车&#xff0c;收款等业务操作环节&#xff0c;全方位&#xff0c;闭环管理&#xff0c;精细化管理。充费利用信息技术资源&#…

coreldraw和ai哪个好用?有哪些区别

CorelDRAW和Illustrator是两款常被比较的矢量绘图软件&#xff0c;它们在功能上各具特色&#xff0c;在绘图领域中都有一席之地。大多数效果都可以在这两款软件上完成&#xff0c;因此它们在功能上差异不大。 然而&#xff0c;就操作而言&#xff0c;我必须承认CorelDRAW更加便…

蓝牙资讯|三星发布Galaxy SmartTag 2,苹果Find My引领防丢市场

三星发布新品 —— Galaxy SmartTag 2 防丢器&#xff0c;该产品售价 29.99 美元。外观方面&#xff0c;Galaxy SmartTag 2 采用了全新的椭圆设计取代上代 SmartTag 的菱形设计&#xff0c;钥匙孔也比上代更大&#xff0c;并升级采用金属圆环以防止磨损&#xff0c;新品提供黑色…

Kafka在企业级应用中的实践

前言 前面说了很多Kafka的性能优点&#xff0c;有些童鞋要说了&#xff0c;这Kafka在企业开发或者企业级应用中要怎么用呢&#xff1f;今天咱们就来简单探究一下。 1、 使用 Kafka 进行消息的异步处理 Kafka 提供了一个可靠的消息传递机制&#xff0c;使得企业能够将不同组件…

[UUCTF 2022 新生赛]ezpop - 反序列化+字符串逃逸【***】

[UUCTF 2022 新生赛]ezpop 一、解题过程二、其他WP三、总结反思 一、解题过程 题目代码&#xff1a; <?php //flag in flag.php error_reporting(0); class UUCTF{public $name,$key,$basedata,$ob;function __construct($str){$this->name$str;}function __wakeup(){i…