leetcode maximum gap
2016-06-27 14:24
239 查看
这道题目是,给你一组乱序非负整数,求排好序后,这组数的连续两个数的最大差值。
例如,3,9,10,2,8,4,1。则最大差值是4。
一开始就考虑到可能要使用桶排序,但是最开始的思路是按照数的最高位的值大小来排序,这个思路并不行。
后来上网查了下答案。一开始没看懂。
大概思路是:
另max,min分别为数组中的最大值和最小值,length为数组的元素个数
那么设置每个桶的大小为:size=ceiling[(max-min)/(length-1)](ceiling为向上取整函数)
则共有,(max-min)/size+1个桶。然后将每个元素放入它所属于的桶中。
对于n,所属的桶为(n-min)/size
那么求出两个相邻桶的min和max差值的最大值。即为max gap。
我的疑惑在于,如果max gap存在于桶内怎么办?
这是不可能的,原因在于,maxGap一定是大于桶的size 的。maxGap最小的情况就是元素均匀分布在min~max之内。而
这个size显然是要大于maxGap的最小值的。
这道题告诉我们一个思路,构造一组桶,杜绝桶内存在解的可能,那么解一定存在于桶与桶之间。
例如,3,9,10,2,8,4,1。则最大差值是4。
一开始就考虑到可能要使用桶排序,但是最开始的思路是按照数的最高位的值大小来排序,这个思路并不行。
后来上网查了下答案。一开始没看懂。
大概思路是:
另max,min分别为数组中的最大值和最小值,length为数组的元素个数
那么设置每个桶的大小为:size=ceiling[(max-min)/(length-1)](ceiling为向上取整函数)
则共有,(max-min)/size+1个桶。然后将每个元素放入它所属于的桶中。
对于n,所属的桶为(n-min)/size
那么求出两个相邻桶的min和max差值的最大值。即为max gap。
我的疑惑在于,如果max gap存在于桶内怎么办?
这是不可能的,原因在于,maxGap一定是大于桶的size 的。maxGap最小的情况就是元素均匀分布在min~max之内。而
这个size显然是要大于maxGap的最小值的。
这道题告诉我们一个思路,构造一组桶,杜绝桶内存在解的可能,那么解一定存在于桶与桶之间。
相关文章推荐
- android官方下拉刷新控件SwipeRefreshLayout的使用
- python写入已存在的excel数据
- JPA实体继承实体的映射策略
- 299. Bulls and Cows-两组数据的重复度
- AlarmManager
- Ubuntu12.04 上网静态IP配置方法
- zabbixt安装
- css reset
- IOS UIView 03- 自定义 Collection View 布局
- 多条件组合的查询列表页缓存
- 块代码传值
- C++ Boost 学习资源列表
- Qt中全局加载自定义的字库
- 一个程序员的自我修养
- centos lnmp环境搭配tomcat和jdk
- Android使用Palette获取图片主色调
- Linux系统日常管理
- 设计模式---观察者模式
- java基础第22天_mysql存储过程、事务隔离
- 演进型分组数据网关 LTE与Wi-Fi之间无缝移动性语音通话