leetcode 1046

it2022-05-05  151

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;    }}

转载于:https://www.cnblogs.com/cold-windy/p/11201338.html


最新回复(0)