有一堆石头,每块石头的重量都是正整数。
每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为 x
和 y
,且 x <= y
。那么粉碎的可能结果如下:
- 如果
x == y
,那么两块石头都会被完全粉碎; - 如果
x != y
,那么重量为x
的石头将会完全粉碎,而重量为y
的石头新重量为y-x
。
最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0
。
提示:
1 <= stones.length <= 30
1 <= stones[i] <= 1000
C++
class Solution {
public:
int lastStoneWeight(vector<int>& stones)
{
int n=stones.size();
priority_queue<int> que;
for(int i=0;i<n;i++)
{
que.push(stones[i]);
}
if(1==n)
{
return stones[0];
}
else
{
while(que.size()>1)
{
int s1=que.top();
que.pop();
int s2=que.top();
que.pop();
if(s1!=s2)
{
int tmp=abs(s1-s2);
que.push(tmp);
}
}
if(1==que.size())
{
return que.top();
}
else
{
return 0;
}
}
}
};
python
import queue
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
n=len(stones)
que=queue.PriorityQueue()
for i in stones:
que.put(-i)
if 1==n:
return stones[0]
else:
while que.qsize()>1:
a=que.get()
b=que.get()
if a!=b:
que.put(-abs(a-b))
if 1==que.qsize():
return -que.get()
else:
return 0