Maximum Gap【Hard】桶排序

这道题会用到Bucket Sort的概念。 【一看题目就发现如果用Sort的话起码nlogn, 太慢了】

假设Array有N个数。 每个Bucket里代表一个interval. 然后根据数字大小扔到对应范围的Bucket里。

桶的个数 =  (最大数减最小数)/N    +1   

比如[1,1,1,5,5,5]   (5-1)/6=0  然后再加一 保证我们至少有一个桶。

Interval= (num-mini)/ 桶的个数。


如果数组是uniform gap.[2,4,6,8,10] 这种,我们知道gap = (max-min)/(n-1)

但是如果不是uniform,绝对会有一个gap比(max-min)/(n-1)大的, 要不然无法cancel effects of 比(max-min)/(n-1)小的。所以如果我们把bucket size限制小于等于(max-min)/(n-1)。 也就是同一个bucket内部的elements的gap无论如何都不是不是全数组里最大的gap。 于是,我们只要在bucket和bucket之间找就可以了。


然后我们用两个数字  int[] min =[....],   int[] arr=[...]

把每个bucket的min, max 放进去。

min[0]

max[0] 表示bucket 0的最小和最大值。


然后把每个bucket直接互相相减: bucket A的最小值和bucketB的最大值 相减得到差。

最后取最大差值。

代码实现:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容