如上图所示,最大缝隙用到了散列表,
1,对N个数获取最大值hi和最小值lo
2,借助散列表,将[lo,hi)均匀分配到0到n-2,共n-1个桶中,而最大值hi放到第n-1个桶内。
3,去掉没有元素的空桶
4,将每个桶的最后一个元素和下一个桶的第一个元素取出,对这些元素找最大的缝隙,即为maxGap
5,时间复杂度为o(n),因为是用空间换时间(n个桶)
那么第四步是怎么回事呢?
我是这么认为的。
1,假如是相对均匀,每个桶一个元素,正好,从小到大把各个数都取出,计算这n个值两两之间的差距。
2,如果距离比较悬殊,则很明显有空桶,则剔除空桶后,前一个桶的最后一个元素和后一个桶的第一个元素之间就有若干个桶的距离。而同一个桶内的相邻元素之间的缝隙是小于一个桶的,所以成立。