说明:
- 用数组int[ ]queue来充当堆,用变量int length来记录队列的有效元素长度
- sort( ):实现堆排序(堆排序算法详解:点击此处)
- poll( ):弹出队列首元素
- add( ):往堆中添加元素
- peek( ):返回队列首元素
class priorityQueue{
int[] queue=new int[5000];
int length=0;
private void sort(){
for(int i=length/2-1;i>=0;i--){
int left=2*i+1>=length?i:2*i+1;
int right=2*i+2>=length?i:2*i+2;
int root=queue[i];
int lChild=queue[left];
int rChild=queue[right];
if(root<=lChild&&root<=rChild){
continue;
}
int max=Math.min(rChild,lChild);
int maxIndex=lChild<=rChild?left:right;
queue[maxIndex]=root;
queue[i]=max;
}
}
public int poll(){
int temp=queue[0];
queue[0]=queue[length-1];
queue[length-1]=temp;
length--;
sort();
return queue[length];
}
public void add(int val){
queue[length++]=val;
sort();
}
public int peek(){
if(length==0){
throw new RuntimeException("队列为空");
}
return queue[0];
}
}