我正在實現具有popMin和popMax方法的隊列類。到目前爲止,我使用兩個優先級隊列工作,但即使刪除是log(n)時間,我也必須從另一個隊列中刪除,這是線性的。我知道一個雙重優先級隊列可以使用二進制堆實現,但是如果我沒有弄錯需要線性時間來構建呢?有沒有辦法我可以更有效地做到這一點?我也只能使用Java庫類。在小於線性時間的情況下從最小 - 最大隊列類中刪除最小值和最大值
static class MinMaxQueue {
PriorityQueue<String> MinQueue = new PriorityQueue<String>();
PriorityQueue<String> MaxQueue = new PriorityQueue<String>(Collections.reverseOrder());
void push(String val) {
MinQueue.add(val);
MaxQueue.add(val);
}
String popMin() {
MaxQueue.remove(MinQueue.peek());
return MinQueue.remove();
}
String popMax() {
MinQueue.remove(MaxQueue.peek());
return MaxQueue.remove();
}
int size() {
return MinQueue.size();
}
}