Я делаю проблемы практики Practice IT Kth SmallestКак восстановить приоритет PriorityQueue до его начального состояния перед вызовом метода?
Эта проблема в основном вы прошли в PriorityQueue и некоторого к, и вы должны вернуть -ю наименьшее значение в этом PriorityQueue. Вы также должны восстановить PriorityQueue в исходное состояние и можете использовать один стек или очередь в качестве вспомогательной структуры данных.
Мой высокий уровень псевдо мышления является то, что, поскольку PriorityQueue действует как мин кучи уже с Java PriorityQueue, все, что я действительно должен сделать (мой алгоритм) является:
Снимите к элементов из PriorityQueue
магазин -й наименьшее значение в качестве локальной переменной
Нажимные удалены к элементов на стек (стек таким образом я могу добавить элементы в том же порядке)
Поп все элементы из стека и повторно добавить их обратно в PriorityQueue
Вернуться к-й наименьшее значение
Вот код, чтобы сделать все, что:
public int kthSmallest(PriorityQueue<Integer> pQ, int k) {
if(k <= 0 || k > pQ.size()) {
throw new IllegalArgumentException();
} else {
Stack<Integer> aux = new Stack<Integer>();
int kThSmallest = -1;
for(int c=0;c<k;c++){
int element = pQ.remove();
if(c == k-1)
kThSmallest = element;
aux.push(element);
}
while(!aux.isEmpty())
pQ.add(aux.pop());
return kThSmallest;
}
}
Когда я запускаю программу, я получаю все правильные выходы в терминах k-го наименьшего размера, но я не могу восстановить состояние моего PriorityQueue. Например, при переходе в PriorityQueue из:
[-3, 9, 17, 22, 42, 81] with a k of 3
... мой алгоритм дает правильный результат, 17, но он изменяет состояние PriorityQueue к [-3, 17, 9, 81, 22, 42]
, который является неожиданным.
Я думал о создании копии PriorityQueue, но это нарушает одно из условий: «вы можете использовать один стек или очередь в качестве вспомогательной структуры данных».
Как я могу восстановить состояние PriorityQueue?
Как вы определяете внутреннее состояние 'PriorityQueue'? – kraskevich
Сохраните все, что вы удалили, и верните его перед выходом. – EJP
Что заставляет вас думать, что ваше текущее решение неверно? Мне кажется правильным. – kraskevich