我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/maximum-gap/description/
题目描述:
知识点:桶排序
思路:桶排序
如果数组中的元素个数小于2,直接返回0即可。
对于n(n >= 2)个元素,假设其中的最大值是max,最小值是min。
如果max和min相等,显然我们应该返回0。
否则,为其准备n + 1个桶,每个桶中的数字区间尽量平均分配,即第一个桶中存放[min, min + capacity)区间内的数字,最后一个桶中存放[max - capacity, max]区间内的数字。显然,max和min已经保证了第一个桶和最后一个桶不是空桶。
显然,将n个元素放进n + 1个桶里,至少会有一个空桶。同一个桶内的差值必然小于capacity,而间隔一个空桶的差值必然会大于capacity。因此,最大差值只可能在空桶的两边产生,即空桶的后一个非空桶的最小值减去空桶的前一个非空桶的最大值。
由此计算方式,我们也可以发现,我们无需保存桶中的所有元素,只需保存桶中的最大值和最小值即可,即数组