164. Maximum Gap
problem description
Given an unsorted array, find the maximum difference between the successive elements in its sorted form.
Return 0 if the array contains less than 2 elements.
Example 1:
Example 2:
Note:
You may assume all elements in the array are non-negative integers and fit in the 32-bit signed integer range.
Try to solve it in linear time/space.
algorithm thought
乍一看发现只要排好序,然后得到两两直接差值的最大值就行了。问题是这里要求我们使用线性时间解决问题,使用普通的比较排序,最快的就是快排,时间复杂度是O(lgn)。使用比较排序是不行的,这里需要使用线性时间排序算法,桶排序就很适合这里。桶排序原理是将数据按组分入桶中,对于桶里的数在进行线性时间排序。但是对于这题,巧妙的处理可以省去桶里数据排序这一步。
桶的大小是关键,这里我们首先遍历一遍数组,得到数组的最大值和最小值。最大值减去最小值就可以得到最大的gap。然后除以size-1,就能得到平均的gap。也就是这个题的可能的最小值。我们令这个值为桶的大小。桶里的数字直接的差值我们是不需要记录的,只需要记录桶直接的数字差值。
然后就是遍历数组,将数字放入桶内,保存桶的最大最小值。最后再遍历一次桶,得到最后的max_gap
code
algorithm analysis
桶排序只需要线性时间,时间复杂度O(n),空间复杂度O(n).
Last updated