按照自定义的方式来对队列中的数据进行动态排序,默认最大堆,即队列top为最大的元素。
可以重写PriorityQueue的Comparator进行排序定义。
堆是一颗顺序存储的完全二叉树。、
1.最小堆
每个节点的关键字都不大于起孩子节点的关键字
2.最大堆 (默认)
每个结点的关键字都不小于其孩子结点的关键字
// 优先队列-最小队列,可以不设置队列大小
// peek() 取出最上层元素
// remove() 删除最上层元素
package Queue;
import java.util.*;
public class SeatManager {
private int start;//座位号数
private PriorityQueue<Integer> minheap;
private int[] arr;
public SeatManager(int n) {
this.start=0;
this.minheap = new PriorityQueue<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
}
public int reserve() {
if (this.minheap.isEmpty()){
this.start=this.start+1;
return this.start;
}else{
int value = this.minheap.peek();
this.minheap.remove();
return value;
}
}
public void unreserve(int seatNumber) {
this.minheap.add(seatNumber);
}
}