⭐欢迎订阅《leetcode》专栏,每日一题,每天进步⭐

用大顶堆来操作即可,注意java对pq默认是小顶堆,稍微处理下

——leetcode此题热评

前言

哈喽,大家好,我是一条。

糊涂算法,难得糊涂

点击跳转到《糊涂算法》专栏学习java大厂面试必备数据结构和算法知识!

Question

1046. 最后一块石头的重量

难度:简单

有一堆石头,每块石头的重量都是正整数。

每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:

如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。

示例:

输入:[2,7,4,1,8,1]
输出:1
解释:
先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1],
再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1],
接着是 2 和 1,得到 1,所以数组转换为 [1,1,1],
最后选出 1 和 1,得到 0,最终数组转换为 [1],这就是最后剩下那块石头的重量。

提示:

1 <= stones.length <= 30
1 <= stones[i] <= 1000

Solution

先了解一下堆的特性即可。

  • 元素入堆
  • 弹出最大的两个
  • 判断大小
  • 差入堆

Code

所有leetcode代码已同步至github

欢迎star

/*** @author 一条coding*/
class Solution {public int lastStoneWeight(int[] stones) {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();int b = pq.poll();if (a > b) {pq.offer(a - b);}}return pq.isEmpty() ? 0 : pq.poll();}
}

Result

复杂度分析

  • 时间复杂度:O(N)

【算法练习】75.最后一块石头的重量——大顶堆相关推荐

  1. LeetCode 1046. 最后一块石头的重量(priority_queue 堆)

    1. 题目 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x ...

  2. LeetCode 1049. 最后一块石头的重量 II(DP)

    1. 题目 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出任意两块石头,然后将它们一起粉碎. 假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x ...

  3. 代码随想录算法训练营day42 |动态规划之背包问题 11.分割等和子集 1049. 最后一块石头的重量 II 494. 目标和

    day42 11.分割等和子集 1.dp数组的含义 2.确定递推公式 3.dp数组初始化 4.确定遍历顺序 5.打印dp数组 1049. 最后一块石头的重量 II 1.确定dp数组以及下标的含义 2. ...

  4. leetcode1046. 最后一块石头的重量(java)

    最后一块石头的重量 leetcode1046. 最后一块石头的重量 题目描述 解题思路 代码演示 往期经典算法 leetcode1046. 最后一块石头的重量 来源:力扣(LeetCode) 链接:h ...

  5. LeetCode-动态规划背包题-1049. 最后一块石头的重量 II

    描述 1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石 ...

  6. LeetCode 1049. 最后一块石头的重量 II

    1049. 最后一块石头的重量 II 无论按照何种顺序粉碎石头,最后一块石头的重量总是可以表示成 可以这样理解,将所有的石头分为两堆,ki=1的石头是一堆,ki=-1的石头是另一堆,我们的目标就是求上 ...

  7. leetcode 1046. 最后一块石头的重量(堆)

    有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y ...

  8. 1046. 最后一块石头的重量

    链接:1046. 最后一块石头的重量 题解: class Solution {public:int lastStoneWeight(vector<int>& stones) {st ...

  9. 力扣1046-最后一块石头的重量(原汁原味利用排序,自己写的100% Java题解)

    力扣1046-最后一块石头的重量 一.原题题目 1.1 题目   有一堆石头,每块石头的重量都是正整数.每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x ...

最新文章

  1. 你管这破玩意儿叫负载均衡?
  2. xcode symbol(s) not found for architecture i386错误解决方法
  3. java 基础 --静态
  4. JAVA的静态代理与动态代理比较--转载
  5. 使用Java程序通过http post访问ABAP Netweaver服务器
  6. Mycat 之 通过Keepalived 实现高可用
  7. jzoj3501-消息传递【换根法,树形dp】
  8. Linux安装MySQL的完整步骤并有关MySQL8.0版本的问题方法
  9. java if 赋值语句_Java中有一种特殊的赋值运算叫做三元运算,它和if-else语句类似....
  10. A + B Problem II 大数加法
  11. DataSnap服务器从xe2升级到xe5报错的处理
  12. C++实训easyx打地鼠(动画版)
  13. ueedit富文本编辑器的使用
  14. 基于 ZNS 模式搭建并运行 FEMU
  15. 深圳大学物计算机黄yilin,中国科学引文数据库(CSCD)收录本校教师论文情况.doc...
  16. 最近3年股息率最高排名
  17. 【转】提高MATLAB运行效率
  18. 打开计算机页面只有上面一半,我电脑打开网页总是打开一半,不知道是为什么,请高手指教,谢谢!...
  19. 前端axios下载excel文件(二进制)的处理方法
  20. 接口转换器故障与解决办法

热门文章

  1. sys_stat_statements 扩展使用介绍
  2. es6,find方法的使用
  3. 文献阅读——《元会的建构——中国古代帝国的朝政与礼仪》
  4. tomcat6类加载器与类加载顺序
  5. 爬虫day8通信和线程池进程池总结
  6. 使用两个路由器共享上网的接法
  7. Android Jetpack组件ViewModel基本使用和原理分析
  8. Vue实现数字翻牌器效果
  9. LogTAD:无监督跨系统日志异常域检测
  10. G1调优实践日记--被误解的MetaspaceSize