Maximum Gap【Hard】桶排序

Maximum Gap【Hard】桶排序_第1张图片
Maximum Gap【Hard】桶排序_第2张图片

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

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

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

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

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


Maximum Gap【Hard】桶排序_第3张图片

如果数组是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之间找就可以了。

Maximum Gap【Hard】桶排序_第4张图片


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

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

min[0]

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


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

最后取最大差值。

代码实现:

Maximum Gap【Hard】桶排序_第5张图片

你可能感兴趣的:(Maximum Gap【Hard】桶排序)