class Solution {
public int lastStoneWeight(int[] stones) {
//默认为最小堆,使用Lambda表达式传入自己的比较器转换成最大堆
PriorityQueue<Integer> pq = new PriorityQueue<Integer>((a, b) -> b - a);
for (int stone : stones) {
pq.offer(stone);
}
while (pq.size() > 1) {
int a = pq.poll();//对于poll()方法,它将检索队列的head元素,然后删除队列的head元素;
int b = pq.poll();
if (a > b) {
pq.offer(a - b);//offer()方法用于将给定元素(a - b)添加到此PriorityQueue中
}
}
return pq.isEmpty() ? 0 : pq.poll();//如果队列为空,则它将返回null,但不会引发异常
}
}
1046. 最后一块石头的重量 大顶堆应用
最新推荐文章于 2023-04-04 15:30:33 发布
该博客介绍了一个Java方法,用于解决两组石头相互砸剩最后一块石头的重量问题。通过创建一个最大堆,将所有石头的重量加入堆中,每次取出两个最大重量的石头相减,将差值再次放入堆中,直到只剩一个元素,即为最后的石头重量。
摘要由CSDN通过智能技术生成