zoukankan      html  css  js  c++  java
  • 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;
        }
    }

  • 相关阅读:
    浅析NetFilter和iptables
    关于skb_header_pointer函数
    Linux kernel 绝对路径之d_path篇
    几个内核函数:filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR
    一文读懂数字签名
    Nginx配置文件nginx.conf中文详解(总结)
    nginx 重写 rewrite 基础及实例
    最完美解决Nginx部署ThinkPHP项目的办法
    nginx中的try_files指令解释
    js电话号码正则校验--座机和手机号
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11201338.html
Copyright © 2011-2022 走看看