实现思想
1、存储数据时,给每一个数据元素关联一个整数,例如insert(int k, T t),我们可以看做 k 是t的关联的整数,那么我们的实现需要通过k这个值,快速获取到队列中 t 这个元素,此时有个k这个值需要具有唯一性。
2、通过第一步后,得到的数组items并不是堆有序,所以,我们增加一个数组 int[] auxiliary ,保存每个元素在items数组中的索引,auxiliary数组需要堆有序。
3、增加一个数组int[] reverse,用来存储auxiliary 的逆序,所谓逆序就是:把auxiliary 的索引作为reverse的元素存储,auxiliary 的元素作为reverse的索引值。
代码实现
public class IndexMinPriorityQueue<T extends Comparable> {
private T[] items;
private int size;
//辅助数组
private Integer[] auxiliary;
//辅助数组逆序
private Integer[] auxiliaryReverse;
public IndexMinPriorityQueue(int capacity) {
items = (T[]) new Comparable[capacity+1];
auxiliary = new Integer[capacity+1];
auxiliaryReverse = new Integer[capacity+1];
size=0;
}
//判断K对应的元素是否存在
//这里判断的是auxiliary数组
pub