在最小堆中查找最大值

时间:2012-11-16 04:40:29

标签: java algorithm

我正在学习考试,并且从我正在查看的其中一个工作表中,它要求为存储整数的最小堆写一个最大的方法()。

public class Heap {
   private int[] arr = new int[100];
   private int numElts = 0;

   public int largest(){

  }

}

最大大小为100个元素,newElt跟踪存储在堆中的当前元素数。

我在想做类似的事情:

int[] newArr = Collections.sort(arr);
return newArr[newElt];

然后那将改变原始堆。 我可以对它进行深层复制,但它说没有必要检查所有堆的元素。

所以有人可以建议一种方法来做到这一点,而不是看每一个元素? 谢谢,

1 个答案:

答案 0 :(得分:3)

如果您的结构是堆排序,如果它是-max堆 - 那么您的最大元素将只是arr[0]。但是因为它是一个最小堆,所有你知道的是max元素是一个叶子节点。

所以你不需要测试每个元素。但是你需要查看最多一半的元素(对于二叉树,叶子的数量在1到一半之间加上一个,包括两个帐户)。

您可以通过知道二进制堆(您描述的)是一个特殊的平衡二进制树来快捷查看叶节点,通过一个小的计算可以告诉您两组叶节点的位置可能是。