如何找出一个数列中的最大的N个值?
这是一个在面试中经常遇见的问题,此问题的关键是应尽可能的减少节点的比较次数,从而降低时间复杂度.因此选择小顶堆这个数据结构....这也是在TopN问题中,能始终保持N个元素,并且很高效的一个原因.
删除最小节点过程是用树的最后一个节点替换为根节点,并重新调整为小顶堆....删除根节点2
将节点41替换为根节点,并找到较小的叶子节点7,交换位置.
2....在java中,解决TopN问题,可以直接使用优先队列类(PriorityBlockingQueue),这个类已经替我们实现了添加和删除操作,并且能通过扩展Comparator能自定义排序方法.有兴趣的可以看看源码...{
if (minData < data[i]) {
// 大于原来最小的,就放进去新的,删除旧的