给定一个无序的数组,找出数组在排序后相邻的元素之间最大的差值。
尽量尝试在线性时间和空间复杂度情况下解决此问题。
若数组元素个数少于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 最大间距相关推荐

  1. 164. Maximum Gap 1

    164. Maximum Gap 1. 题目 Given an unsorted array, find the maximum difference between the successive e ...

  2. leetcode 164. Maximum Gap | 164. 最大间距(桶排序)

    题目 https://leetcode.com/problems/maximum-gap/ 题解 桶排序,用数组模拟桶 class Solution {public int maximumGap(in ...

  3. 164. Maximum Gap

    题目: Given an unsorted array, find the maximum difference between the successive elements in its sort ...

  4. 以太网帧间隙IFG详解(Interframe Gap帧间距)

    目录 一.什么是帧间距(IFG) 1.1.前导码(Preamble) 1.2.帧开始界定符(SFD) 1.3.IFG(Interframe Gap帧间距) 二.为什麽什么是帧间距 三.IFG的大小为多 ...

  5. Leetcode每日一题:164.maximum-gap(最大间距)

    思路:开始没看见下面的说明,直接一sort完事了:后来看见后无疑就想到了基数排序,只有计数排序和基数排序能在最坏的情况下达到线性时间复杂度,而基数排序无疑不满足线性空间复杂度,所以这里选择基数排序: ...

  6. kali linux 2019教程,[教程]KALI LINUX 2.0 2019 更新国内源

    2019年最新版本KALI 为 KALI 2019.1 下载地址:https://www.kali.org/downloads/ 有的新入门的朋友可能会问,为什么每次都无法手动更新 例如:Update ...

  7. LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本

    1. Array (1) 27. Remove Element(Easy) 给定数组nums和值val,在适当位置删除该值的所有实例并返回新长度. 思路: 不需要使用排序,如果等于该值,则将n-1的值 ...

  8. LeetCode github集合,附CMU大神整理笔记

    Github LeetCode集合 本人所有做过的题目都写在一个java项目中,同步到github中了,算是见证自己的进步.github目前同步的题目是2020-09-17日之后写的题.之前写过的题会 ...

  9. LeetCode解题报告汇总

    LeetCode解题报告: [LeetCode]1.Two Sum - Yoona - 博客频道 - CSDN.NET [LeetCode]2.Add Two Numbers - Yoona - 博客 ...

  10. LEETCODE-刷题个人笔记 Python(1-400)

    按tag分类,250/400的重点题目 LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本 1.Two Sum(easy) 给定一个整型数组,找出能相加起来等于一个特定目标数字 ...

最新文章

  1. python matplot 绘图
  2. 【渝粤题库】国家开放大学2021春2786初级西方经济学题目
  3. leetcode 1202. 交换字符串中的元素(并查集)
  4. 微信获取位置 转化为 高德地图 位置 地址
  5. android 分享元素,Android开发之5.0activity跳转时共享元素的使用方法
  6. 力扣题目——1557. 可以到达所有点的最少点数目
  7. 《WF编程》系列之15 - 顺序工作流与SequenceActivity 3 顺序工作流
  8. 工作中一些环境问题解决记录
  9. 【入门】R语言最详细Windows安装指南
  10. java实现阳历农历节以及节假日日期计算
  11. 不良资产剥离或许将成为历史名词
  12. Android Studio模拟器使用sqlite3建立SQLite数据库
  13. 自定义容器实现类似Windows屏保功能
  14. 收到了两家公司的offer怎么选择?
  15. MVC、MVP与MVT
  16. MacOS Ventura 13.0 (22A380) 正式版带 OC 0.8.5 and winPE 双分区原版黑苹果镜像
  17. CIPP非开挖修复技术|UV紫外光与传统水翻CIPP修复对比分析
  18. hdu 4114 Disney's FastPass 状压dp
  19. 2021哈工大计算机考研复试名单,哈尔滨工业大学各学院2021年硕士研究生复试名单...
  20. matlab-数学运算

热门文章

  1. mysql 介于两个日期函数_帮忙看一上这个mysql函数,用来返回两个日期之间的年数...
  2. asp 环境配置到mysql数据库增删改查
  3. SQL中truncate 、delete与drop区别 (Rollback Segment)
  4. 访问HDFS报错:org.apache.hadoop.security.AccessControlException: Permission denied
  5. 阿里面试官:HashMap 熟悉吧?好的,那就来聊聊 Redis 字典吧!
  6. Zookeeper 概述与安装、配置参数、数据结构、选举机制、客户端命令
  7. 小D课堂 - 新版本微服务springcloud+Docker教程_4-04 高级篇幅之服务间调用之负载均衡策略调整实战...
  8. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_3_TCP通信的客户端代码实现...
  9. java之struts2之类型转换
  10. [CF321E] Ciel and Gondolas