Java 大小根堆的实现

Posted 上帝爱吃苹果

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 大小根堆的实现相关的知识,希望对你有一定的参考价值。

Heap是一种数据结构它是一个完全二叉树具有以下的特点:
技术分享图片

  • Min-heap: 父节点的值小于或等于子节点的值;
  • Max-heap: 父节点的值大于或等于子节点的值;
public class minAndMaxheap {
    //大根堆和小根堆的实现
    //优先级队列默认是小根堆的实现
    static class MaxheapComparator implements Comparator<Integer> {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2-o1;
        }
    }

    public static void main(String[] args) {
        int[] arrForHeap = { 3, 5, 2, 7, 0, 1, 6, 4 };
        Queue<Integer> minHeap = new PriorityQueue<>();
        //大根堆实现
        Queue<Integer> maxHeap = new PriorityQueue<>(new MaxheapComparator());
        for (int i =0;i<arrForHeap.length;i++) {
            minHeap.add(arrForHeap[i]);
            maxHeap.add(arrForHeap[i]);
        }
        while (!minHeap.isEmpty()) {
            System.out.print(minHeap.poll()+" ");
        }
        System.out.println();
        while (!maxHeap.isEmpty()) {
            System.out.print(maxHeap.poll()+" ");
        }
    }
}
result:
0 1 2 3 4 5 6 7 
7 6 5 4 3 2 1 0 
Process finished with exit code 0

以上是关于Java 大小根堆的实现的主要内容,如果未能解决你的问题,请参考以下文章

优先队列实现 大小根堆 解决top k 问题

算法之--堆的简单介绍

为啥 Java 堆的最大大小是固定的?

力扣347. 前 K 个高频元素与C++stl优先队列(大小根堆)的自定义排序用法总结

力扣347. 前 K 个高频元素与C++stl优先队列(大小根堆)的自定义排序用法总结

堆模板