Como restaurar o PriorityQueue para seu estado inicial antes da chamada do método?

Estou fazendo um problema de práticaPratique a TI com o menor

Esse problema é basicamente transmitido em um PriorityQueue e em um certo k, e você deve retornar o k-menor valor nesse PriorityQueue. Você também deve restaurar o PriorityQueue para seu estado inicial e pode usar uma pilha ou fila como uma estrutura de dados auxiliar.

Meu pseudo-pensamento de nível superior é que, porque o PriorityQueue já atua como um heap mínimo, deJava PriorityQueue, tudo o que realmente preciso fazer (meu algoritmo) é:

Remova os elementos k do PriorityQueue

Armazene o k-menor valor como uma variável local

Empurre os elementos k removidos para uma pilha (pilha para que eu possa adicionar elementos na mesma ordem)

Retire todos os elementos da pilha e adicione-os novamente ao PriorityQueue

Retornar o k-ésimo valor menor

Aqui está o código para fazer tudo isso:

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;
      }    
}

Quando executo o programa, obtenho todas as saídas corretas, em termos de késimo menor, mas não consigo restaurar o estado do meu PriorityQueue. Por exemplo, ao transmitir um PriorityQueue de:

[-3, 9, 17, 22, 42, 81] with a k of 3

... meu algoritmo produz o resultado certo, 17, mas altera o estado do PriorityQueue para[-3, 17, 9, 81, 22, 42], o que é inesperado.

Pensei em fazer uma cópia do PriorityQueue, mas isso viola as condições: "você pode usar uma pilha ou fila como uma estrutura de dados auxiliar".

Como posso restaurar o estado do PriorityQueue?

questionAnswers(1)

yourAnswerToTheQuestion