大小为 k 的堆中添加元素的时间复杂度为 O ( log k ) {O}(\log k) O(logk),我们将重复该操作 N 次,故总时间复杂度为 O ( N log k ) {O}(N \log k) O(Nlogk)。
Java中的堆是用优先队列PriorityQueue实现的。默认创建一个最小堆,可以接受一个Comparator比较器,来创建最大堆。由于Comparator是一个函数接口,这里我们可以直接传入一个lambda表达式就能够自动创建Comparator对象。
函数接口与lambda表达式参考这里:函数接口与lambda表达式
Queue<Integer> minheap =new PriorityQueue<Integer>();//默认为最小堆
Queue<Integer> maxheap =new PriorityQueue<Integer>((n1, n2) -> n2-n1);//创建最大堆