力扣-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],这就是最后剩下那块石头的重量。
源代码
class Solution {public:int lastStoneWeight(vector<int>& stones) {while(stones.size()>=2){sort(stones.begin(),stones.end());int n=stones.size();if(stones[n-1]==stones[n-2]){stones.pop_back();stones.pop_back();}else{stones[n-2]=stones[n-1]-stones[n-2];stones.pop_back();}}if(stones.size()==1) return stones[0];return 0;}
};
复杂度分析:
时间复杂度:O(nlogn),其中 n 是石头数量。每次从队列中取出元素需要花费 O(logn) 的时间,最多共需要粉碎 n−1 次石头。
空间复杂度:O(1)
力扣-1046 最后一块石头的重量相关推荐
- 力扣1046 - 最后一块石头的重量
目录 1.题目-> 题目解读-> 该题需要注意的细节-> 2.更容易理解的代码(建议新手) 代码-> 核心思想-> 3.更简洁的代码(使用Queue队列) 代码-> ...
- 力扣1046-最后一块石头的重量(原汁原味利用排序,自己写的100% Java题解)
力扣1046-最后一块石头的重量 一.原题题目 1.1 题目 有一堆石头,每块石头的重量都是正整数.每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x ...
- 力扣1046 最后一块石头 推排序
有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y ...
- 力扣题解-1046. 最后一块石头的重量
题目:1046. 最后一块石头的重量 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉 ...
- 1046. 最后一块石头的重量
链接:1046. 最后一块石头的重量 题解: class Solution {public:int lastStoneWeight(vector<int>& stones) {st ...
- leetcode 1046 最后一块石头的重量
1046. 最后一块石头的重量 难度简单98收藏分享切换为英文接收动态反馈 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎.假设石头的重量分别为 x ...
- LeetCode 1046. 最后一块石头的重量(priority_queue 堆)
1. 题目 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x ...
- 力扣 leetcode 1046. 最后一块石头的重量 (python)
Topic: 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 ...
- leetcode 1046. 最后一块石头的重量(堆)
有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y ...
- LeetCode[1046]最后一块石头的重量
难度:简单 题目: 有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: ...
最新文章
- java jdk1.8环境变量的配置
- 计算机网络 实验六 静态路由配置,《计算机网络》实六 静态路由配置 实验报告.doc...
- Call指令和Ret指令讲解
- 【工具篇】抓包中的王牌工具—Fiddler (1-环境搭建)
- redis3.2.3安装部署实战
- 【译】Facebook 开源 Detectron
- PHP 使用程序进行数据库字典文件生成 导出数据库字典
- [Codeforces702F]T-Shirts——非旋转treap+贪心
- 垃圾回收策略和算法,看这篇就够了
- ajax redirectattributes 使用,Spring中RedirectAttributes对象重定向传参
- 解决MySQL Workbench导出低版本MySQL时报错Unknown table ‘column_statistics’ in information_schema的问题
- Window操作系统安全配置
- 集团企业网站群建设发展趋势
- dango shell 操作crud
- 网速特别好但是访问网页特别慢
- 【大数据处理技术】实验3
- sql20005 分页存储过程
- VS2008 ActiveX(ocx控件)的调试工具ActiveX Control Test Container安装说明
- icloud android 日历同步到iphone,Mac的日历事件如何同步到iphone?
- 用耳机浏览器无声音的解决方法