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;
}
}
Leetcode--164. 最大间距相关推荐
- LeetCode 164. 最大间距
思路:先对数组进行基数排序(或桶排序)时间复杂度为N,再遍历比较获取最大间距. public static int maximumGap(int[] nums) {if(nums.length < ...
- LeetCode 164. 最大间距(桶排序+鸽笼原理)
2020年9月4日 周五 天气晴 [不悲叹过去,不荒废现在,不惧怕未来] 本文目录 桶排+鸽笼原理 想法 代码 参考文献 桶排+鸽笼原理 想法 桶的容量 bucketSize = (maxVal - ...
- leetcode 164. 最大间距(桶排序)
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值. 如果数组元素个数小于 2,则返回 0. 示例 1: 输入: [3,6,9,1] 输出: 3 解释: 排序后的数组是 [1,3,6,9] ...
- leetcode 164. Maximum Gap | 164. 最大间距(桶排序)
题目 https://leetcode.com/problems/maximum-gap/ 题解 桶排序,用数组模拟桶 class Solution {public int maximumGap(in ...
- LeetCode 868. 二进制间距(位运算)
1. 解题 给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离. 如果没有两个连续的 1,返回 0 . 输入:22 输出:2 解释: 22 的二进制是 0b10110 . ...
- leetcode 868. 二进制间距
[题目]868. 二进制间距 给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离. 如果没有两个连续的 1,返回 0 . 示例 1: 输入:22 输出:2 解释: 22 ...
- LeetCode——868. 二进制间距
868. 二进制间距 题目描述 答案 我的代码 官方答案 位运算 题目描述 给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 .如果不存在两个相邻的 1,返回 0 . ...
- LeetCode题解目录
最新更新于2020.11.27 前往LeetCode主页. 前往GitHub源码.(服务器原因,暂停同步.) 前往码云主页. 已解决 456/1878 - 简单353 中等 90 困难 13 2020 ...
- LeetCode-究极刷题【合集】
文章目录 题目来源LeetCode LeetCode 1. 两数之和-规律 LeetCode 2. 两数相加-链表 LeetCode 3. 无重复字符的最长子串-模板 LeetCode 4. 寻找两个 ...
- C#LeetCode刷题-排序
排序篇 # 题名 刷题 通过率 难度 56 合并区间 31.2% 中等 57 插入区间 30.4% 困难 75 颜色分类 48.6% 中等 147 对链表进行插入排序 50.7% 中等 148 排序链 ...
最新文章
- python使用matplotlib可视化subplots子图、subplots绘制子图、子图之间有重叠问题、使用subplots_adjust函数合理设置子图之间的水平和垂直距离
- 使用C#实现网站用户登录 (转)
- centos7 xfce 中文字体输入法
- zabbix监控深信服_Zabbix 远程代码执行漏洞CVE202011800
- DELPHI日期时间函数(DateUtils单元)
- C++Primer模板
- html5 video 播放状态,10分钟了解HTML5的Video标签属性、方法和事件
- ae saber插件_AE激光插件Video Copilot Saber安装方法
- 漫谈GUI开发—各种平台UI开发概况
- JavaScript 将两个数组合并,且删除重复的值
- 1stopt拟合步骤_1stopt三维曲线拟合
- 如何在CAD图纸中添加文字
- matlab做南丁格尔玫瑰图,用VBA做个南丁格尔玫瑰图模板!
- 突破封锁——MAC地址欺骗
- 《好吗好的》--大冰
- 2009 year English Inprovement for IT developments
- 决策力--用别人预测自己(3)
- RT-Thread Nano移植使用整理
- 运放单电源与双电源问题探讨
- [python学习中]Linux总结用到的命令
热门文章
- 程序员面试金典 - 面试题 10.10. 数字流的秩(map/树状数组)
- formdata.append加多个值_redis的五种数据结构和应用场景:微博微信点赞+加购物车等...
- android 行布局选择器,『自定义View实战』—— 银行种类选择器
- mysql维护计划任务_浅谈MySQL event 计划任务
- Django第一天笔记
- bigdecimal如何做除法_二胎家庭如何平衡两个孩子的关系?聪明的父母都懂这四个法则...
- sql两个时间之间的小时差_2年级学生每天上学路上有两个小时车程,该如何利用好这个时间?-知乎亲子热点快报/2020/09/04...
- ICML2021 | Self-Tuning: 如何减少对标记数据的需求?
- Spring Boot引起的“堆外内存泄漏”排查及经验总结
- Android静态代码扫描效率优化与实践