最小-最大堆的 Java 实现?

新手上路,请多包涵

你知道一个流行的库(Apache、谷歌等,集合)有一个可靠的最小-最大堆的 Java 实现,这是一个允许在 O(1) 中查看其最小值和最大值的堆并删除 O(log n) 中的一个元素?

原文由 Yuval Adam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 788
2 个回答

Java 有很好的工具来实现最小堆和最大堆。我的建议是使用优先队列数据结构来实现这些堆。要使用优先队列实现最大堆,请尝试以下操作:

 import java.util.PriorityQueue;

public class MaxHeapWithPriorityQueue {

    public static void main(String args[]) {
    // create priority queue
    PriorityQueue<Integer> prq = new PriorityQueue<>(Collections.reverseOrder());

    // insert values in the queue
    prq.add(6);
    prq.add(9);
    prq.add(5);
    prq.add(64);
    prq.add(6);

    //print values
    while (!prq.isEmpty()) {
        System.out.print(prq.poll()+" ");
    }
    }

}

要使用优先队列实现最小堆,试试这个:

 import java.util.PriorityQueue;

public class MinHeapWithPriorityQueue {

    public static void main(String args[]) {
        // create priority queue
        PriorityQueue< Integer > prq = new PriorityQueue <> ();

        // insert values in the queue
        prq.add(6);
        prq.add(9);
        prq.add(5);
        prq.add(64);
        prq.add(6);

        //print values
        while (!prq.isEmpty()) {
            System.out.print(prq.poll()+" ");
        }
    }

}

欲了解更多信息,请访问:

原文由 Mohammad 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题