leetcode 1046
class Solution {
public int lastStoneWeight(int[] stones) {
MaxHeap s=new MaxHeap(stones.length+1);
for(int i=0;i<stones.length;i++)
{
s.insert(stones[i]);
}
while(s.size()>1)
{
int y=s.extractMax();
int x=s.extractMax();
if(y>x)
{
s.insert(y-x);
}
}
if(s.size()==1)
{
return s.extractMax();
}
else
return 0;
}
}
class MaxHeap{
private int[] stone;
private int count;
private int capacity;
public MaxHeap(int capacity)
{
this.capacity=capacity;
stone=new int[capacity+1];
count=0;
}
public void insert(int n)
{
stone[++count]=n;
shiftUp(count);
}
private void shiftUp(int count)
{
while(count>1&&stone[count/2]<stone[count])
{
swap(count/2,count);
count=count/2;
}
}
public void swap(int i,int j)
{
int temp=stone[i];
stone[i]=stone[j];
stone[j]=temp;
}
public int extractMax()
{
int res=stone[1];
swap(1,count);
count--;
shiftDown(1);
return res;
}
private void shiftDown(int i)
{
int j=2*i;
while(j<=count)
{
if(j+1<=count&&stone[j+1]>stone[j])
{
if(stone[j+1]>stone[i])
{
swap(j+1,i);
i=j+1;
j=2*i;
}
else
break;
}
else
{
if(stone[j]>stone[i])
{
swap(j,i);
i=j;
j=2*i;
}
else
break;
}
}
}
public int size()
{
return count;
}
}
leetcode 1046的更多相关文章
- LeetCode 1046. 最后一块石头的重量(1046. Last Stone Weight) 50
1046. 最后一块石头的重量 1046. Last Stone Weight 题目描述 每日一算法2019/6/22Day 50LeetCode1046. Last Stone Weight Jav ...
- LeetCode 1046. Last Stone Weight
原题链接在这里:https://leetcode.com/problems/last-stone-weight/ 题目: We have a collection of rocks, each roc ...
- leetcode 57 Insert Interval & leetcode 1046 Last Stone Weight & leetcode 1047 Remove All Adjacent Duplicates in String & leetcode 56 Merge Interval
lc57 Insert Interval 仔细分析题目,发现我们只需要处理那些与插入interval重叠的interval即可,换句话说,那些end早于插入start以及start晚于插入end的in ...
- LeetCode 1046. 最后一块石头的重量 (贪心)
有一堆石头,每块石头的重量都是正整数. 每一回合,从中选出两块最重的石头,然后将它们一起粉碎.假设石头的重量分别为 x 和 y,且 x <= y.那么粉碎的可能结果如下: 如果 x == y,那 ...
- Leetcode题解 - 贪心算法部分简单题目代码+思路(860、944、1005、1029、1046、1217、1221)
leetcode真的是一个学习阅读理解的好地方 860. 柠檬水找零 """ 因为用户支付的只会有5.10.20 对于10元的用户必须找一个5 对于20元的用户可以找(三 ...
- 【LeetCode】1046. Last Stone Weight 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 大根堆 日期 题目地址:https://leetco ...
- 【leetcode】1046. Last Stone Weight
题目如下: We have a collection of rocks, each rock has a positive integer weight. Each turn, we choose t ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- LeetCode.1046-最后的石头重量(Last Stone Weight)
这是小川的第388次更新,第418篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第250题(顺位题号是1046).有一个石头集合,每个石头都有一个正整数重量值. 每次,我 ...
随机推荐
- 计算机CPU是怎么认识代码的?
先说一下半导体,啥叫半导体?就是介于导体和绝缘体中间的一种东西,比如二极管. 电流可以从A端流向C端,但反过来则不行.你可以把它理解成一种防止电流逆流的东西. 当C端10V,A端0V,二极管可以视 ...
- PCB layout注意事项
1.信号线一般12mil以上,选15或20左右及以上 via内外径选2倍关系的,如内径10mi外径20mil,但不是绝对,内10外15.18也可. 2.mil与mm单位转换,即100mil=2.54m ...
- JDK1.8特性(更新中..)
"15,5,9,17,99,107,47"转List<Long> List<Long> linkCompanyIds = Arrays.asList(&qu ...
- 码农会锁,synchronized 对象头结构(mark-word、Klass Pointer)、指针压缩、锁竞争,源码解毒、深度分析!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 感觉什么都不会,从哪开始呀! 这是最近我总能被问到的问题,也确实是.一个初入编程职场 ...
- python中,*args和**kwargs这两个参数的作用是什么?
*args和**kwargs这两个都是不定长参数,可以解决函数中参数不固定的问题,*args可以把位置参数转化成元组,**kwagrs可以把关键字参数转化成字段
- wepack配置
一.什么是 webpack? webpack是一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理,它能有Grunt ...
- JavaSE基础语法学习-流程控制
流程控制 用户交互Scanner Scanner**对象** 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); 接下来我们演示一个最 ...
- python 关键字yield
问题 Python 关键字 yield 的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, distance, m ...
- 深度学习中的Dropout
dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络. ...
- httpserver ---tcp参数设置
1.SO_REUSEADDR选项: 在服务器程序中,SO_REUSEADDR socket选项通常在调用bind()之前被设置.SO_REUSEADDR可以用在以下四种情况下: (摘自<Unix ...