164 Maximum Gap 最大间距
给定一个无序的数组,找出数组在排序后相邻的元素之间最大的差值。
尽量尝试在线性时间和空间复杂度情况下解决此问题。
若数组元素个数少于2,则返回0。
假定所有的元素都是非负整数且范围在32位有符号整数范围内。
详见:https://leetcode.com/problems/maximum-gap/description/
Java实现:题目要求是要线性的时间和空间,那么只能用桶排序。同一个桶里的数差值不会有不同桶间的差值大,所以找桶内最大和下一个非空桶的桶内最小进行比较即可。
class Solution {public int maximumGap(int[] nums) {int n=nums.length;if (nums == null || n < 2){return 0;}// 计算数组中的最大值和最小值int min = nums[0];int max = nums[0];for (int num:nums) {min = min>num?num:min;max = max<num?num:max;}// the minimum possibale gap, ceiling of the integer divisionint gap = (int)Math.ceil((double)(max - min)/(n - 1));int[] bucketsMIN = new int[n - 1]; // 记录桶中的最小值int[] bucketsMAX = new int[n - 1]; // 记录桶中最大值Arrays.fill(bucketsMIN, Integer.MAX_VALUE);Arrays.fill(bucketsMAX, Integer.MIN_VALUE);// put numbers into bucketsfor (int num:nums) {if (num == min || num == max){continue;}int idx = (num - min) / gap; // index of the right position in the bucketsbucketsMIN[idx] = Math.min(num, bucketsMIN[idx]);bucketsMAX[idx] = Math.max(num, bucketsMAX[idx]);}// scan the buckets for the max gapint maxGap = Integer.MIN_VALUE;int previous = min;for (int i = 0; i < n - 1; i++) {if (bucketsMIN[i] == Integer.MAX_VALUE && bucketsMAX[i] == Integer.MIN_VALUE){// 跳过空桶continue;}// min value minus the previous value is the current gapmaxGap = Math.max(maxGap, bucketsMIN[i] - previous);// update previous bucket valueprevious = bucketsMAX[i];}maxGap = Math.max(maxGap, max - previous); // 更新最大间隔return maxGap;}
}
参考:https://www.cnblogs.com/grandyang/p/4234970.html
转载于:https://www.cnblogs.com/xidian2014/p/8728428.html
164 Maximum Gap 最大间距相关推荐
- 164. Maximum Gap 1
164. Maximum Gap 1. 题目 Given an unsorted array, find the maximum difference between the successive e ...
- leetcode 164. Maximum Gap | 164. 最大间距(桶排序)
题目 https://leetcode.com/problems/maximum-gap/ 题解 桶排序,用数组模拟桶 class Solution {public int maximumGap(in ...
- 164. Maximum Gap
题目: Given an unsorted array, find the maximum difference between the successive elements in its sort ...
- 以太网帧间隙IFG详解(Interframe Gap帧间距)
目录 一.什么是帧间距(IFG) 1.1.前导码(Preamble) 1.2.帧开始界定符(SFD) 1.3.IFG(Interframe Gap帧间距) 二.为什麽什么是帧间距 三.IFG的大小为多 ...
- Leetcode每日一题:164.maximum-gap(最大间距)
思路:开始没看见下面的说明,直接一sort完事了:后来看见后无疑就想到了基数排序,只有计数排序和基数排序能在最坏的情况下达到线性时间复杂度,而基数排序无疑不满足线性空间复杂度,所以这里选择基数排序: ...
- kali linux 2019教程,[教程]KALI LINUX 2.0 2019 更新国内源
2019年最新版本KALI 为 KALI 2019.1 下载地址:https://www.kali.org/downloads/ 有的新入门的朋友可能会问,为什么每次都无法手动更新 例如:Update ...
- LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本
1. Array (1) 27. Remove Element(Easy) 给定数组nums和值val,在适当位置删除该值的所有实例并返回新长度. 思路: 不需要使用排序,如果等于该值,则将n-1的值 ...
- LeetCode github集合,附CMU大神整理笔记
Github LeetCode集合 本人所有做过的题目都写在一个java项目中,同步到github中了,算是见证自己的进步.github目前同步的题目是2020-09-17日之后写的题.之前写过的题会 ...
- LeetCode解题报告汇总
LeetCode解题报告: [LeetCode]1.Two Sum - Yoona - 博客频道 - CSDN.NET [LeetCode]2.Add Two Numbers - Yoona - 博客 ...
- LEETCODE-刷题个人笔记 Python(1-400)
按tag分类,250/400的重点题目 LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本 1.Two Sum(easy) 给定一个整型数组,找出能相加起来等于一个特定目标数字 ...
最新文章
- python matplot 绘图
- 【渝粤题库】国家开放大学2021春2786初级西方经济学题目
- leetcode 1202. 交换字符串中的元素(并查集)
- 微信获取位置 转化为 高德地图 位置 地址
- android 分享元素,Android开发之5.0activity跳转时共享元素的使用方法
- 力扣题目——1557. 可以到达所有点的最少点数目
- 《WF编程》系列之15 - 顺序工作流与SequenceActivity 3 顺序工作流
- 工作中一些环境问题解决记录
- 【入门】R语言最详细Windows安装指南
- java实现阳历农历节以及节假日日期计算
- 不良资产剥离或许将成为历史名词
- Android Studio模拟器使用sqlite3建立SQLite数据库
- 自定义容器实现类似Windows屏保功能
- 收到了两家公司的offer怎么选择?
- MVC、MVP与MVT
- MacOS Ventura 13.0 (22A380) 正式版带 OC 0.8.5 and winPE 双分区原版黑苹果镜像
- CIPP非开挖修复技术|UV紫外光与传统水翻CIPP修复对比分析
- hdu 4114 Disney's FastPass 状压dp
- 2021哈工大计算机考研复试名单,哈尔滨工业大学各学院2021年硕士研究生复试名单...
- matlab-数学运算
热门文章
- mysql 介于两个日期函数_帮忙看一上这个mysql函数,用来返回两个日期之间的年数...
- asp 环境配置到mysql数据库增删改查
- SQL中truncate 、delete与drop区别 (Rollback Segment)
- 访问HDFS报错:org.apache.hadoop.security.AccessControlException: Permission denied
- 阿里面试官:HashMap 熟悉吧?好的,那就来聊聊 Redis 字典吧!
- Zookeeper 概述与安装、配置参数、数据结构、选举机制、客户端命令
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-04 高级篇幅之服务间调用之负载均衡策略调整实战...
- 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_3_TCP通信的客户端代码实现...
- java之struts2之类型转换
- [CF321E] Ciel and Gondolas