输入一序列的整数(共n个),找出前十个元素(Top 10)。可以用Heap实现:在堆满时,如果要插入一个新的元素,则需比较该元素是不是当前堆中最小的元素,如果不是,则需要将该新元素替换最小的元素,从而维护一个TOP N的堆。通常最小的元素查找需要线性时间,因为只需要查找叶子节点(这是由堆的ordering property决定的),而叶子节点个数最多为2^O([logn] ) = O(n),所以查找最小元的总开销为O(n),然后需要重新构建堆,其总开销为O(nlogn), 二者加起来总的时间复杂度为O(nlogn), 空间开销为O(1)。显然比通过排序查找Top N的空间复杂度要低得多!
实现:
测试输出:
78 66 20 13 9 6 4 3 2 1