https://leetcode.com/problems/maximum-gap/
sort 算法除了比较算法之外,还有distributed sort,时间效率可以优于O(nlogn),甚至可以达到O(n).包括couting sort, bucket sort, radix sort.
复习这三种的原理。
参考https://www.byvoid.com/blog/sort-radix
这里对于bucket sort,提到
可能你会发现,计数排序似乎饶了点弯子,比如当我们刚刚统计出C,C[i]可以表示A中值为i的元素的个数,此时我们直接顺序地扫描C,就可以求出排序后的结果。的确是这样,不过这种方法不再是计数排序,而是桶排序(Bucket Sort),确切地说,是桶排序的一种特殊情况。
用这种方法,可以很容易写出程序,比计数排序还简单,只是不能求出稳定的Order。
这里就解释了我对counting sort的疑惑,count了之后其实可以直接再scan一遍c就可以得到排序的结果了,这样其实就变成了bucket sort。
这里还要注意bucket sort,分配元素到每个bucket的方式,每个bucket的范围已经是有序的了,所以也就是最后只需要scan一下每个bucket就得到了排序的结果。而最极端的情况就是最大值是k,那么就分配k个bucket。这样就是O(n)的了,
通常
当桶的个数M接近于N是,桶排序的时间复杂度就可以近似认为是O(N)的。就是桶越多,时间效率就越高,而桶越多,空间却就越大,由此可见时间和空间是一个矛盾的两个方面。
所以一般可以认为bucket sort可以达到最好的time complexity O(n)
这题目就是bucket sort或者radix sort之后,再找gap就行了
排序算法参考
http://www.jianshu.com/p/ae97c3ceea8d#、
https://www.byvoid.com/blog/sort-radix
关于这道题:
http://yucoding.blogspot.hk/2014/12/leetcode-question-maximum-gap.html
http://bookshadow.com/weblog/2014/12/14/leetcode-maximum-gap/