2020年9月4日 周五 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
桶的容量 bucketSize = (maxVal - minVal) / (nums.size() - 1),从数学角度思考,bucketSize 就是 nums 中每相邻两个数差值的平均值 avgGap,而我们要求的是 nums 里相邻两个数的最大差值 maxGap,因此 maxGap >= avgGap = bucketSize。而桶内的区间都是前闭后开的,形如 [min,a)、[b,c)、[d,e)、[f,max),这样的话,一个桶内的最大间距就小于桶的容量,所以最大间距不会出现在桶内。同时,为了方便编码,生成桶的数量应该要 +1,这样就不需要单独去处理边界值 max 了。
时间复杂度: O ( n + b ) ≈ O ( n ) O\left( {n + b} \right) \approx O\left( n \right) O(n+b)≈O(n) 假设桶的大小为 b b b。线性遍历一遍数组中的元素,复杂度为 O ( n ) O\left( n \right) O(n)。找到桶之间的最大间距需要线性遍历一遍所有的桶,复杂度为 O ( b ) O\left( b \right) O(b)。所以总复杂度是线性的。
空间复杂度: O ( 2 ⋅ b ) ≈ O ( b ) O\left( {2 \cdot b} \right) \approx O\left( b \right) O(2⋅b)≈O(b)的额外空间。 每个桶只需要存储最大和最小元素,因此额外空间和桶个数线性相关。
https://leetcode-cn.com/problems/maximum-gap/solution/cjie-shi-wei-shi-yao-zui-da-jian-ju-bu-hui-chu-xia/ https://leetcode-cn.com/problems/maximum-gap/solution/javacong-bi-jiao-pai-xu-dao-ji-shu-pai-xu-zai-dao-/ https://leetcode-cn.com/problems/maximum-gap/solution/zui-da-jian-ju-by-leetcode/