力扣(LeetCode)164. 最大间距(C++)

news2024/11/24 6:36:46

桶排序(划分区间)

一次遍历找到区间内最大值 M a x Max Max ,最小值 M i n Min Min 。区间 ( M i n , M a x ] (Min,Max] (Min,Max] 左开右闭,划分为 n − 1 n-1 n1 个长度为 l e n len len 的区间 ,划分的区间左开右闭,所以每个子区间有 l e n − 1 len-1 len1 个数。
根据实际意义,
( n − 1 ) ( l e n − 1 ) ≤ M a x − M i n − 1 (n-1)(len-1)\le Max - Min -1 (n1)(len1)MaxMin1 时,答案一定不在某个子区间内部取到。
整理上式,得,
l e n ≤ ⌊ M a x − M i n + n − 2 n − 1 ⌋ = ⌈ M a x − M i n n − 1 ⌉ len\le\lfloor\frac{Max-Min+n-2}{n-1}\rfloor=\lceil\frac{Max-Min}{n-1}\rceil lenn1MaxMin+n2=n1MaxMin C + + C++ C++ 代码只使用不等式的前半段。

有了子区间的长度,数字就可以对应到子区间了。再次遍历 n u m s nums nums ,维护每个子区间的最大值 m a x max max ,最小值 m i n min min ,区间是否用到 u s e d used used

最后遍历所有子区间,维护答案,即为所求。

class Solution {
public:
    int maximumGap(vector<int>& nums) {
        const int INF = 0x3f3f3f3f;
        struct Range{
            int min,max;
            bool used;
            Range () : min(INF) , max ( -INF) , used(false) {}
        };
        int n = nums.size();
        int Min = INF, Max = -INF;
        for(auto &x:nums){
            Min = Min<x?Min:x;
            Max = Max>x?Max:x;
        }
        if(nums.size()<2||Min==Max) return 0;
        vector<Range> r(n-1);
        int len = (Max - Min + n - 2) /(n-1);
        for(auto &x:nums){
            if( x == Min) continue;
            int i = (x - Min -1) / len;
            r[i].min = min(r[i].min,x);
            r[i].max = max(r[i].max,x);
            r[i].used = true;
        }
        int ans = 0 ;
        for(int i = 0,last = Min;i<n-1;i++){
            if(!r[i].used) continue;
            ans = max(ans,r[i].min - last);
            last = r[i].max;
        }
        return ans;
    }
};
  1. 时间复杂度 : O ( n ) O(n) O(n) n n n 是数字数量, 找出最大最小值,计算每个桶的最大最小值,遍历所有桶维护答案,总时间复杂度 O ( 3 × n ) O(3\times n) O(3×n) ,忽略常数时间复杂度 O ( n ) O(n) O(n)
  2. 空间复杂度 : O ( n ) O(n) O(n) n − 1 n-1 n1 个桶的空间复杂度 O ( n ) O(n) O(n)

AC

AC

致语

  • 理解思路很重要!
  • 欢迎读者在评论区留言,墨染看到就会回复的。

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

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

相关文章

SpringCloud学习笔记

SpringCloud学习笔记成熟分布式微服务架构包含技术模块SpringCloud与SpringBoot版本选择SpringCloud各技术模块的技术选择SpringCloud实现订单-支付微服务创建父工程(管理子工程即各个微服务)父工程的build.gradle配置父工程的settings.gradle配置创建支付子工程(payment_nativ…

物联网开发笔记(64)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:控件显示

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程&#xff1a;控件显示。 二、环境 ESP32 ILI9341 3.2寸TFT-LCD触摸屏 Thonny IDE 几根杜邦线 接线方法&#xff1a;见前面文章。 三、滑杆代码 import lvgl as lv i…

北京理工大学汇编语言复习重点

汇编是半开卷&#xff0c;可以带纸质资料。理论上&#xff0c;学好了以后&#xff0c;带本书进去就ok了&#xff0c;但是这次是线上&#xff0c;我还没书&#xff0c;就对着考试重点整理一点资料用于打印吧。 因为是线上&#xff0c;所以第4章基本不考框架了&#xff0c;浮点操…

工业4.0,科技引发产业革命,MES系统是数字化工厂的核心

当前&#xff0c;把握工业4.0时代信息技术引发的产业革命风口期&#xff0c;促进产业数字化转型升级&#xff0c;构建产业竞争新格局&#xff0c;实现弯道超车是难得一遇的大好时机&#xff0c;是局势所趋。在这样的大环境下&#xff0c;顺应全世界产业革命趋势&#xff0c;将数…

python的安装

python可以在所有操作系统上运行&#xff0c;但不同操作系统的安装方法有所不同 以&#xff1a;Mac OS X 和 Windows为例 为了安装 Python 并能正常使用&#xff0c;请根据你的操作系统安装提示&#xff0c;按照相应的步骤来操作。 我们还将进行一系列的测试&#xff0c;确保一…

SpringBoot实战(十)集成多数据源dynamic-datasource

目录1.Maven依赖2. DS注解3.普通Hihari连接池3.1 yml配置4.Druid连接池4.1 Druid依赖4.2 yml配置4.3 排除原生的Druid配置5. UserController6. UserServiceImpl7.测试7.1 新增数据7.2 查询数据7.3 测试结果8.源码地址&#xff1a;dynamic-datasource-spring-boot-starter 是一个…

【大数据入门核心技术-Kafka】(四)Kafka常用shell命令

目录 一、准备工作 1、Zookeeper集群安装 2、Kafka集群安装 二、常用Shell命令 1、创建Topic 2、查看创建的Topic 3、查看某一个Topic的详细信息 4、修改Topic 5、删除Topic 6、生产者发布消息命令 7、消费者接受消息命令 8、查看kafka节点数目 9、查看kafka进程 一…

再学C语言8:数据类型(6)——float和其他类型

一、_Bool类型 _Bool类型由C99引入 _Bool类型用于表示布尔值&#xff1a;逻辑值true&#xff08;真&#xff09;和false&#xff08;假&#xff09; C用值1表示true&#xff0c;用值0表示false&#xff0c;所以_Bool类型本质上也是一种整数类型 二、float、double和long do…

查找排序编程题——二分查找+冒泡排序‍♀️

目录 7-1 二分查找 输入格式: 输出格式: 输入样例: AC&#xff1a; 7-2 冒泡法排序 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; AC&#xff1a; 附&#xff1a; 分享&#x1f31e; &#xff1a; 前途与玫瑰 来日与方…

尝试使用LTTng+TraceCompass分析一下进程周期偏移

准备工作 我先是在板子里通过LTTng Stream的方式将log保存在了上位机里。 然后在上位机中打开TraceCompass分析log。 导出整理log数据 然后我在events表格中搜索我的进程名&#xff0c;发现主要是sched_switch sched_waking sched_wakeup这三类。 然后我又搜索了一下&#x…

10个最好的WordPress RSS插件比较(2022)

您是否正在为您的网站寻找最好的 WordPress RSS 提要插件&#xff1f; RSS 提要插件可以轻松地自动从其他网站提取内容并将其显示在您的网站上。它们还可用于提高参与度、增加流量和增加页面浏览量。 在本文中&#xff0c;我们将分享我们挑选的可在您的网站上使用的最佳 Word…

远眺捷码智慧乡村方案赋能乡村治理,打造更智慧更宜居的乡村

01.智慧乡村治理重要性 “智慧乡村”是以云计算、大数据应用、地理信息系统网络、物联网技术为核心&#xff0c;通过构建服务于政务管理、农业增收、民生幸福等方面的系统应用平台&#xff0c;将社会基础信息、产业发展、环境监测、医疗卫生、劳动保障、社会管理、公共服务等要…

全面便捷的数据管理能力,助力数据运营降本增效

对于任何企业来说&#xff0c;销售和供应链总是天平秤座的两端。如何放置两个砝码是对企业管理能力的极大考验。今天&#xff0c;让我们来谈谈供应链管理的例子来探讨一下对于报表工具而言&#xff0c;怎么样才能让客户全面、便捷的全局管理数据接入。背景&#xff1a;有序的供…

SPRING-了解4-AOP1

主要理念&#xff1a;不用继承&#xff0c;而是用Java Reflect类中的Proxy来实现对方法的增强 面向切面编程 oop的延续&#xff0c;对业务进行隔离&#xff0c;降低耦合度&#xff0c;目标是不改变原来的代码在主干中增加新功能 比如已经写好登录功能&#xff0c;现在需要加…

【大数据技术】流数据、流计算、Spark Streaming、DStream的讲解(图文解释 超详细)

流数据和流计算 在大数据时代&#xff0c;数据可以分为静态数据和流数据&#xff0c;静态数据是指在很长一段时间内不会变化&#xff0c;一般不随运行而变化的数据。流数据是一组顺序、大量、快速、连续到达的数据序列&#xff0c;一般情况下数据流可被视为一个随时间延续而无…

脑白质WM中的血流动力学响应函数HRF的特性

血流动力学响应函数HRF 估计BOLD信号的血流动力学响应函数(HRF)对于解释和分析与事件相关的fMRI数据至关重要广义线性模型(GLM)假设BOLD信号是真实反应与HRF进行卷积而得到的 一般来说&#xff0c;白质中功能激活的检测灵敏度远低于灰质&#xff0c;并且激活区域一般较小 原因…

[附源码]Nodejs计算机毕业设计健身房管理系统设计Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

J-003 Jetson电路设计之USB设计--NANO XAVIER NX

USB设计1 简介2 框图介绍3 USB HUB设计3.1电源部分3.2 芯片引脚3.3 晶振电路4 电源控制4.4 电源开关电路设计4 调试USB电路设计1 简介 NANO & XAVIER NX提供三路USB接口&#xff0c;其中包含一路调试USB&#xff08;用于镜像下载&#xff09;和一路USB3.2接口。引脚说明: …

编码踩坑——MySQL更新存放JSON的字段、\“ 转义成 “

本篇介绍在执行MySQL线上变更时遇到的问题&#xff0c;表现为"更新JSON字段时&#xff0c;实际更新的值与SQL语句中的值不一致&#xff0c;JSON格式错误"&#xff0c;如下&#xff1b; 问题描述 处理线上问题&#xff0c;需要新插入一条记录&#xff1b;将原JSON粘贴…

Jenkins(2)— 配置webhooks触发器

1、项目配置 项目配置 >> 构建触发器 >> 选择Gitee webhook触发器 生成Gitee WebHook密码&#xff1a;46d678257c0399b105635bcb9722ea09 2、Gitee配置 Gitee项目 >> 管理 >> 配置WebHooks 注意&#xff1a; 由于我的jenkins是部署在本地的&#xff…