我正在为有趣/ Java 练习做以下问题:
编写一个方法
kthSmallest
,将 aPriorityQueue
个整数作为输入并输出最小的整数。传入的优先级队列的内部状态不应被该方法更改。您只能使用一个队列或堆栈作为额外数据。不允许其他数据结构。以 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;
}
那么如何在保持优先级队列的内部状态的同时做到这一点呢?
PS - 你可以在这里自己查看问题