目录

一、题目内容

二、解题思路

三、代码


一、题目内容

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

每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 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

二、解题思路

递归,每次排序后取出最后两个比较,相等则继续递归,否则添加二者的差值进stones,再递归;

三、代码

class Solution:def lastStoneWeight(self, stones: list) -> int:n = len(stones)if n == 1:return stones[0]elif n == 0:return 0stones.sort()stone1, stone2 = stones[-2], stones[-1]stones.remove(stone1)stones.remove(stone2)if stone1 == stone2:return self.lastStoneWeight(stones)else:stones.append(stone2 - stone1)return self.lastStoneWeight(stones)if __name__ == '__main__':stones = [2, 7, 4, 1, 8, 1]# stones = [2, 2]s = Solution()ans = s.lastStoneWeight(stones)print(ans)

leetcode_1046. 最后一块石头的重量相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 【5.31 代随_43day】 最后一块石头的重量 II、目标和、一和零

    最后一块石头的重量 II.目标和.一和零 最后一块石头的重量 II 1.方法 图解步骤![在这里插入图片描述](https://img-blog.csdnimg.cn/d2266317bc43491f ...

  8. 2022-2-19 Leetcode 1049.最后一块石头的重量II

    例二分析:26+21-40 = 7 33-31 = 2 7-2 = 5 相当于小块石头集合之后一起去砸大石头. 这道题和最后一块石头的重量I 有什么不同? 例子更复杂了.(虽然不知道复杂在哪里) 这道 ...

  9. [Leet code 最后一块石头的重量]

    1046. 最后一块石头的重量 难度简单239收藏分享切换为英文接收动态反馈 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎.假设石头的重量分别为 x ...

最新文章

  1. 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  2. python学习--第三天 粗略介绍人脸识别
  3. Quartus中常见错误·
  4. 高效能人士的七个习惯_《高效能人士的七个习惯》导图和读后感
  5. 一个技术开发者经常访问的网站
  6. mysql 5.7.10免安装_免安装版mysql5.7.10-16配置教程(2)
  7. Java基础之IO流
  8. DevEco Studio 切换黑色界面(两步搞定)
  9. 基于Spring Boot 的Blog开发
  10. udp聊天室的界面实现
  11. springboot - 应用实践(N)使用springboot内置的@Scheduled
  12. PMP_第4章章节试题
  13. java学习-狼人杀
  14. ecshop 二次开发
  15. opencv读取视频转换成一张张图片
  16. 数值分析常用的几个小程序C++实现
  17. 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 C:计算几何
  18. [精彩泄漏截图] 2006最值得期待的游戏
  19. 邮箱不可用 550 User has no permission(JavaMail登不进邮件系统)
  20. 主成分回归预测matlab,科学网—Matlab: princomp() 主成分分析 - 杨建功的博文

热门文章

  1. java计算机毕业设计web扶贫产品物资管理平台源码+数据库+系统+lw文档
  2. Week 2互评作业:用“埃氏筛法”求2~100以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。
  3. c++ 内存映射文件进程间共享数据
  4. 一班洽谈框架细化_理解层次:框架细化篇(以供参悟)
  5. 开始记录自己的学习过程和目标
  6. 详解缓存穿透、缓存雪崩、缓存击穿
  7. 嵌入式Qt-简易网络监控摄像头
  8. 摩托车爱好者头盔的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 采购合同的效力,了解一下
  10. 放射科信息服务器瘫痪,【身边故事】清明假日,CT突发故障“罢工”“休假”!放射科紧急动员加班加点确保患者检查需求!...