leetcode maximum gap

这道题目是,给你一组乱序非负整数,求排好序后,这组数的连续两个数的最大差值。

例如,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的最小值的。

这道题告诉我们一个思路,构造一组桶,杜绝桶内存在解的可能,那么解一定存在于桶与桶之间。

 

转载于:https://www.cnblogs.com/elnino/p/5620071.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值