gpt4 book ai didi

java - isEmpty() 与优先级队列中的 size() == 0 有何不同

转载 作者:行者123 更新时间:2023-12-01 17:44:16 25 4
gpt4 key购买 nike

所以我正在做 leetcode 问题“Top K 频繁元素”,我使用了priorityQueue 来获取频率。当我开始轮询数字并将其插入数组列表时,for 循环不会轮询队列中的所有元素。为什么?

(假设 PQ 有两个元素)

    while(!pq.isEmpty()){
ls.add(pq.poll());
}

for(int b = 0; b < pq.size();b++){
ls.add(pq.poll());
}

这两个循环不应该打印出相同的东西吗?

我从 while 循环中得到了正确的答案,而我只从 for 循环中得到了一个元素

最佳答案

与第二种方法的区别在于b < pq.size()的值每次迭代都会改变,因为删除元素时元素数量会减少:pq.poll() 。要获得相同的结果(假设我们在迭代时不向队列添加更多元素),请尝试以下操作:

for (int b = 0, n = pq.size(); b < n; b++) {
ls.add(pq.poll());
}

在上面的代码片段中,我们保存 pq 的大小在迭代开始时恰好一次,以确保它不会改变。这会工作得更好,因为它考虑了并发插入/删除的情况:

while (pq.size() > 0) {
ls.add(pq.poll());
}

关于java - isEmpty() 与优先级队列中的 size() == 0 有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com