LeetCode 1046. 最后一块石头的重量
初始化优先队列:将所有石头的重量放入一个最大堆中。 处理石头:每次从堆中取出两块最重的石头。如果它们的重量相等,它们都会被粉碎,返回0。如果不相等,较重的石头会减少到两者之差,并将结果放回堆中。 循环处理:重复上述过程,直到堆中只剩下一块石头或没有石头为止。 初始化优先队列:我们使用一个最大堆来存储石头的重量。由于C++的 处理石头:在循环中,每次取出两个最重的石头。如果它们的重量相等,返回0,表示所有石头都被粉碎。如果不相等,计算它们的差值,并将差值放回堆中。 循环处理:继续处理直到堆中只剩下一块石头或没有石头为止。最后,检查堆中是否有石头,返回堆顶的值或0。
发布日期:2025-06-19 11:55:26
浏览次数:4
分类:精选文章
本文共 1096 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到一种高效的方法来处理石头的粉碎过程。每次操作选择两块最重的石头粉碎,直到只剩下一块石头或没有石头为止。
方法思路
我们可以使用优先队列(堆)来实现这一过程。优先队列可以帮助我们高效地获取当前最重的石头。具体步骤如下:
这种方法的时间复杂度是O(n log n),其中n是石头的数量。每次操作的时间复杂度为O(log n),因为堆的插入和提取操作都是 logarithmic 时间复杂度。
解决代码
#include#include using namespace std;int lastStoneWeight(vector &stones) { priority_queue q; for (int stone : stones) { q.push(stone); } while (q.size() >= 2) { int st1 = q.top(); q.pop(); int st2 = q.top(); q.pop(); int result; if (st1 == st2) { result = 0; } else { result = st1 - st2; } q.push(result); } return q.size() > 0 ? q.top() : 0;}
代码解释
priority_queue默认是最小堆,所以我们直接使用它,或者可以将值取负数来模拟最大堆。这种方法确保了每次操作都处理最重的石头,能够高效地解决问题。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2026年06月21日 16时27分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pip 无法从 requirements.txt 安装软件包
2023-03-02
pip/pip3更换国内源
2023-03-02
pip3 install PyQt5 --user 失败
2023-03-02
pip3命令全解析:Python3包管理工具的详细使用指南
2023-03-02
PIPE 接口信号列表
2023-03-02
pipeline配置与管理Job企业级实战
2023-03-02
pipeline项目配置实战
2023-03-02
Pipenv 与 Conda?
2023-03-02
QVGA/HVGA/WVGA/FWVGA分辨率屏含义及大小//Android虚拟机分辨率
2023-03-02
pipy国内镜像的网址
2023-03-02
quiver绘制python语言
2023-03-02
pip下载缓慢
2023-03-02
PIP使用SSH从BitBucket安装自定义软件包,无需输入SSH密码
2023-03-02
pip在安装模块时提示Read timed out
2023-03-02
pip更换源
2023-03-02
SpringBoot之Banner源码深度分解
2023-03-02
Pix2Pix如何工作?
2023-03-02