私は楽しい/ Javaの練習のために次の問題をやっています:
kthSmallest
整数の aを入力として受け取り、最小PriorityQueue
の整数を出力するメソッドを作成します。渡されたプライオリティ キューの内部状態は、メソッドによって変更されるべきではありません。追加データとして使用できるキューまたはスタックは 1 つだけです。他のデータ構造は許可されていません。は 1 インデックス (最小値を意味します) です。kth
k
k = 1
要素を取得するのは簡単です。それはプライオリティ キューであるため、時間を削除するだけです。私は、ポップオフして要素をストレージ用のスタックに置き、完了したらそれらをキューに戻すことができると考えました。ただし、優先度キューで要素の順序が異なるため、これは機能しません。kth
k
好奇心のための私のコードは次のとおりです。
public int kthSmallest(PriorityQueue<Integer> pq, int k) {
Stack<Integer> s = new Stack<Integer>();
for (int i = 1; i <= k; ++i) {
s.push(pq.remove());
}
int kthValue = s.peek();
while (!s.empty()) {
pq.add(s.pop());
}
return kthValue;
}
では、プライオリティ キューの内部状態を維持しながらこれを行うにはどうすればよいでしょうか。