优先级队列(堆)-1046.最后一块砖的重量-力扣(LeetCode)

个人主页:1白天的黑夜1-CSDN博客

专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客

目录

一、题目解析

1、选出两块最重的石头意为第一重和第二重或同样重

2、如果只剩一块石头,返回石头的重量;如果没有石头返回0

二、算法原理

解法:优先级队列

解法步骤:

三、代码示例


一、题目解析

1、选出两块最重的石头意为第一重和第二重或同样重

2、如果只剩一块石头,返回石头的重量;如果没有石头返回0

二、算法原理

解法:优先级队列

优先级队列就是堆,而堆又有大根堆和小根堆,本题需要用到的就是大根堆

这里模板参数Compare的缺省值为less,也就是按照从根往下,根比孩子大;而小根堆则是greater,从根往下,根比孩子小

解法步骤:

1、借助priority_queue的迭代器构造,用vector也就是存储石头重量的容器迭代器构造

2、循环碰石头(循环条件为大根堆的大小)

1、分别定义两个变量用于记录第一重和第二重石头的重量,赋初值为0

2、判断大根堆中是否还有元素,然后通过top取出石头重量赋值并pop

3、对于两块石头重量进行判断

1、相等,由题可知,两块石头粉碎,循环继续

2、不相等,重的石头减去轻的石头,然后push到大根堆中

4、退出循环条件判断

1、由于循环条件为大根堆的个数,所以0个时不会进入循环,无需判断

2、当只有1个时,会进入循环,重复2的操作,当取出石头后,此时个数为0,但根据3-2的判断逻辑,第二变量未赋值为0,所以此时又被push到大根堆中,如果不做处理会一直重复的,所以在最后判断当第二个变量为0时,代表此时只有一块石头,可以直接返回重量了

3、由于对只有1块石头的情况已处理,所以最后返回0即可

对于top、pop、push和迭代器初始化陌生的读者可以自行查询相关内容

链接priority_queue - C++ Reference

三、代码示例

bash 复制代码
class Solution {
public:
    int lastStoneWeight(vector<int>& stones)
    {
        priority_queue<int> pqi(stones.begin(),stones.end());
        while(pqi.size())
        {
            int st1 = 0,st2 = 0;
            if(pqi.size())
            {
                st1 = pqi.top();
                pqi.pop();
            }
            if(pqi.size())
            {
                st2 = pqi.top();
                pqi.pop();
            }
            if(st1 == st2) continue;
            else
            {
                pqi.push(st1-st2);
            }
            if(st2 == 0) return st1;
        }
        return 0;
    }
};
看到最后,如果对您有所帮助,还请点赞、收藏和关注一键三连,在未来还会继续带来优秀的内容,感谢观看,我们下期再见!
相关推荐
ThisIsMirror几秒前
leetcode 452 Arrays.sort()排序整数溢出、Integer.compare(a[1], b[1])成功的问题
算法·leetcode
王老师青少年编程1 分钟前
csp信奥赛c++之状压枚举
数据结构·c++·算法·csp·信奥赛·csp-s·状压枚举
x_xbx1 小时前
LeetCode:438. 找到字符串中所有字母异位词
算法·leetcode·职场和发展
ysa0510301 小时前
斐波那契上斐波那契【矩阵快速幂】
数据结构·c++·笔记·算法
派大星~课堂2 小时前
【力扣-94.二叉树的中序遍历】Python笔记
笔记·python·leetcode
AI成长日志2 小时前
【笔面试算法学习专栏】堆与优先队列实战:力扣hot100之215.数组中的第K个最大元素、347.前K个高频元素
学习·算法·leetcode
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 45. 跳跃游戏 II | C++ 贪心算法最优解题解
c++·leetcode·游戏
北顾笙9802 小时前
day18-数据结构力扣
数据结构·算法·leetcode
阿Y加油吧3 小时前
LeetCode 中等难度 | 回溯法进阶题解:单词搜索 & 分割回文串
算法·leetcode·职场和发展
森G3 小时前
48、柱状图---------QChart
c++·qt