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的更多相关文章

  1. LeetCode 1046. 最后一块石头的重量(1046. Last Stone Weight) 50

    1046. 最后一块石头的重量 1046. Last Stone Weight 题目描述 每日一算法2019/6/22Day 50LeetCode1046. Last Stone Weight Jav ...

  2. LeetCode 1046. Last Stone Weight

    原题链接在这里:https://leetcode.com/problems/last-stone-weight/ 题目: We have a collection of rocks, each roc ...

  3. 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 ...

  4. LeetCode 1046. 最后一块石头的重量 (贪心)

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

  5. Leetcode题解 - 贪心算法部分简单题目代码+思路(860、944、1005、1029、1046、1217、1221)

    leetcode真的是一个学习阅读理解的好地方 860. 柠檬水找零 """ 因为用户支付的只会有5.10.20 对于10元的用户必须找一个5 对于20元的用户可以找(三 ...

  6. 【LeetCode】1046. Last Stone Weight 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 大根堆 日期 题目地址:https://leetco ...

  7. 【leetcode】1046. Last Stone Weight

    题目如下: We have a collection of rocks, each rock has a positive integer weight. Each turn, we choose t ...

  8. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  9. LeetCode.1046-最后的石头重量(Last Stone Weight)

    这是小川的第388次更新,第418篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第250题(顺位题号是1046).有一个石头集合,每个石头都有一个正整数重量值. 每次,我 ...

随机推荐

  1. APP打开(三)—激活率提升20%的思考

    激活是APP拉新后的一个重要环节.通常,我们希望用户打开我们的APP之后,能够顺利的被激活,从而留下来成为我们的忠实用户. 激活一词,就跟北斗星指标一样,对每个产品来说都是不一样的.有些APP一旦打开 ...

  2. vue3.0 的 Composition API 的一种使用方法

    网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛. 假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面, ...

  3. Google面试题(选自公众号)

    date: 2018-12-14 13:34:56 updated: 2018-12-14 13:34:56 Google面试题(选自公众号) 问题 把你的手机拨号页想象成一个棋盘.棋子走只能走&qu ...

  4. linux压缩和解压文件命令

    tar  解包:tar zxvf filename.tar  打包:tar czvf filename.tar dirnamegz命令  解压1:gunzip filename.gz  解压2:gzi ...

  5. 使用百度云服务器BCC搭建网站,过程记录

    1.买了个最低端的百度云云服务器:1G内存+1核+40系统盘,获得一个静态服务IP地址,之前在阿里那边买个一个域名,在百度云备案一下,通过后就可以正常解析,把域名和IP对应起来了,主要目的是熟悉一下整 ...

  6. js 重排和重绘

    1.什么是重排和重绘 浏览器下载完页面中的所有组件--HTML标记.JavaScript.CSS.图片之后会解析生成两个内部数据结构--DOM树和渲染树. DOM树表示页面结构,渲染树表示DOM节点如 ...

  7. 判断app访问还是web访问网站

    function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", " ...

  8. 一站式Web开发套件BeetleX.WebFamily

    BeetleX.WebFamily是一款前后端分离的Web开发套件,但它并不依赖于nodejs/npm/webpack等相关工具:而使用自身实现的方式来完成前后端分离的Web应用开发:套件以组件的方式 ...

  9. 【总结】mybatis

    一.config配置文件详解 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE config ...

  10. 用 Java 训练深度学习模型,原来可以这么简单!

    本文适合有 Java 基础的人群 作者:DJL-Keerthan&Lanking HelloGitHub 推出的<讲解开源项目> 系列.这一期是由亚马逊工程师:Keerthan V ...