Leetcode--164. 最大间距

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

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

示例 1:

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

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

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

思路:桶排序

把几个数字装进一个桶,每次比较相邻桶的差距,即现在桶的最小值与上一个桶的最小值

那么桶长应该是多少呢?

现在有n个数字,如果他们都是等差的,例如[2,4,6,8],那么每一个间距就是2,如果arr[i]与arr[i-1]的差距变小,那么arr[i]与arr[i+1]差距就变大,所以等差的时候桶的长度是所需最小的。

 int t = Math.max(1,(max-min)/(nums.length-1));//桶长    区间长度除以区间个数

int sum = 1+(max-min)/t;    //桶个数    区间长度/桶长

提交的代码:

class  Tong{

    int max = -1;

    int min = 2147483647>>1;

}

class Solution {

    public int maximumGap(int[] nums) {

       int max = -1;

         int min = 2147483647>>1;

         if(nums.length<2)

         {

             return 0;

         }

         int i;

         for(i=0;i<nums.length;i++)

         {

             max = Math.max(max,nums[i]);

             min = Math.min(min,nums[i]);

         }

         int t = Math.max(1,(max-min)/(nums.length-1));//桶长

         int sum = 1+(max-min)/t;    //桶个数

         

         Tong tong[] = new Tong[sum];

         //System.out.println(tong[0].max);

         for(i=0;i<nums.length;i++)

         {

             int x = (nums[i]-min)/t;

             if (tong[x] == null) 

             {

                 tong[x] = new Tong();

             }

             tong[x].max = Math.max(nums[i], tong[x].max);

             tong[x].min = Math.min(nums[i], tong[x].min);

         }

         int maxgap=0;

         min = 2147483647>>1;

         for(i=0;i<sum;i++)

         {

             if(tong[i]==null)

             {

                 continue;

             }

             if(min==2147483647>>1)

             {

                 min = tong[i].max;

                 continue;

             }

             maxgap = Math.max(maxgap,tong[i].min-min); 

             min = tong[i].max;

         }

         return maxgap;

    }

}

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

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

相关文章

人工肌肉重大突破登上 Science!多国科学家联合实现全新驱动机

来源&#xff1a;雷锋网作者&#xff1a;付静2021 年&#xff0c;机器人已经「成精」了&#xff0c;公然吵架、组团热舞再也不是愚蠢的人类专属。然鹅在很多人心里&#xff0c;机器人还是僵硬、机械甚至冰冷的。即便如此&#xff0c;技术日新月异&#xff0c;柔性机器人快速发展…

Leetcode--442. 数组中重复的数据

给定一个整数数组 a&#xff0c;其中1 ≤ a[i] ≤ n &#xff08;n为数组长度&#xff09;, 其中有些元素出现两次而其他元素出现一次。 找到所有出现两次的元素。 你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗&#xff1f; 示例&#xff1a; 输入: [4,3,2…

【HAOI2010】工厂选址题解

题目描述 某地区有m座煤矿&#xff0c;其中第i号矿每年产量为ai吨&#xff0c;现有火力发电厂一个&#xff0c;每年需用煤b吨&#xff0c;每年运行的固定费用&#xff08;包括折旧费&#xff0c;不包括煤的运费&#xff09;为h元&#xff0c;每吨原煤从第i号矿运到原有发电厂的…

盘点|应用落地,构建城市“大脑”

来源&#xff1a;IDC圈北京&#xff1a;“云”建智慧之都“全国政治中心、文化中心、国际交往中心、科技创新中心……”城市战略定位下的北京正处在落实首都城市战略定位、建设国际一流和谐宜居之都的关键时期。2020年初&#xff0c;新冠疫情爆发&#xff0c;北京市政府快速响应…

Leetcode--289. 生命游戏

根据百度百科&#xff0c;生命游戏&#xff0c;简称为生命&#xff0c;是英国数学家约翰何顿康威在1970年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live&#xff08;1&#xff09;即为活细胞…

深度信念网络研究现状与展望

来源&#xff1a;专知摘要: 深度信念网络(Deep belief network, DBN)是一种基于深度学习的生成模型, 克服了传统梯度类学习算法在处理深层结构所面临的梯度消失问题, 近几年来已成为深度学习领域的研究热点之一.基于分阶段学习的思想, 人们设计了不同结构和学习算法的深度信念网…

使用JDBC进行简单连接

学习笔记&#xff1a;JDBC与数据库 集训的有关总结 连接数据库&#xff08;MySQL&#xff09;的步骤&#xff1a; 导入jar包(可以去官网下) 复制mysql-connector-java-5.1.37-bin.jar到项目libs目录下 右键–>Add As Library 注册驱动 获取数据库连接对象Connection 定…

Leetcode--41. 缺失的第一个正数

给定一个未排序的整数数组&#xff0c;找出其中没有出现的最小的正整数。 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11,12] 输出: 1 说明: 你的算法的时间复杂度应为O(n)&#xff0c;并且只能使用常数级别的空间。 思路:时间…

深度学习中的3个秘密:集成、知识蒸馏和蒸馏

作者&#xff1a;Zeyuan Allen-Zhu来源&#xff1a;AI公园编译&#xff1a;ronghuaiyang在现在的标准技术下&#xff0c;例如过参数化、batch-normalization和添加残差连接&#xff0c;“现代”神经网络训练 —— 至少对于图像分类任务和许多其他任务来说 —— 通常是相当稳定的…

对于JDBC的简单理解

什么是JDBC&#xff1f;为什么要使用JDBC&#xff1f; 1. JDBC JDBC是Java DataBase Connectivity的缩写&#xff0c;即Java程序访问数据库的标准接口使用Java程序访问数据库时&#xff0c;通过JDBC接口来访问JDBC驱动来实现对数据库的操作JDBC接口是Java标准库自带的&#xf…

BeautifulSoup

BeautifulSoup是一个模块&#xff0c;该模块用于接收一个HTML或XML字符串&#xff0c;然后将其进行格式化&#xff0c;之后遍可以使用他提供的方法进行快速查找指定元素&#xff0c;从而使得在HTML或XML中查找指定元素变得简单。 1. 安装 pip3 install beautifulsoup42.示例 fr…

Leetcode-45. 跳跃游戏Ⅱ

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 …

研究揭示人类大脑进化的基因组调控机制

来源&#xff1a;中国科学院昆明动物研究所人类大脑起源于漫长的生命进化过程&#xff0c;其最显著的改变是大脑的认知功能&#xff0c;反映在脑容量的显著扩大和脑结构的高度精细化。在人类进化过程中&#xff0c;“哪些遗传改变造就了人类大脑”是学界长期力图解决的科学问题…

计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配

计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配 一. 概述 存储器的分类 按存储介质划分&#xff1a; (1)半导体存储器 双极型(TTL)、MOS (2)磁表面存储器 磁头、载磁体 (3)磁芯存储器(目前几乎已不被采用)硬磁材料、环状元件 (4)光盘存储器 激光、…

interceptor 拦截器的使用 (session验证)

需要引入 http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd之前是3.0.xsd mvc:exclude-mapping 报错 需要改成3.2.xsd <mvc:interceptors> <mvc:interceptor> <!-- 需拦截的地址 --> …

Leetcode--229. 求众数Ⅱ

给定一个大小为 n 的数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 说明: 要求算法的时间复杂度为 O(n)&#xff0c;空间复杂度为 O(1)。 示例 1: 输入: [3,2,3] 输出: [3] 示例 2: 输入: [1,1,1,3,3,2,2,2] 输出: [1,2] 思路&#xff1a; 摩尔投票法 超过…

刚刚,《The Scientist》预测了未来最热门的生命科学技术

图片来源&#xff1a;illumina来源&#xff1a;中国生物技术网去年&#xff0c;新冠疫情席卷全球&#xff0c;生物医学研究领域学者奋起应对挑战&#xff0c;并取得了前所未有的科学成就。2021年已来&#xff0c;尽管大流行还在继续&#xff0c;但美国《The Scientist&#xff…

Java Web项目的层次结构及常见分包

Java Web项目的层次结构及常见分包 Web项目中的层次 ControllerServiceDaoController层&#xff1a;表现层&#xff08;视图&#xff09;层。用来显示数据和接收用户数据Service层&#xff1a;业务逻辑层&#xff0c;用来处理页面。先写接口&#xff0c;后写实现类Dao层&#…

BZOJ3489 A simple rmq problem 【可持久化树套树】*

BZOJ3489 A simple rmq problem Description 因为是OJ上的题&#xff0c;就简单点好了。给出一个长度为n的序列&#xff0c;给出M个询问&#xff1a;在[l,r]之间找到一个在这个区间里只出现过一次的数&#xff0c;并且要求找的这个数尽可能大。如果找不到这样的数&#xff0c;则…

Leetcode--319. 灯泡开关

初始时有 n 个灯泡关闭。 第 1 轮&#xff0c;你打开所有的灯泡。 第 2 轮&#xff0c;每两个灯泡你关闭一次。 第 3 轮&#xff0c;每三个灯泡切换一次开关&#xff08;如果关闭则开启&#xff0c;如果开启则关闭&#xff09;。第 i 轮&#xff0c;每 i 个灯泡切换一次开关。 …