#leetCode刷题纪实 Day10

https://leetcode-cn.com/problems/last-stone-weight/

有一堆石头,每块石头的重量都是正整数。

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

如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。

 

提示:

1 <= stones.length <= 30
1 <= stones[i] <= 1000

 

小菜鸡的尝试:

其实很容易发现可以用优先队列做(但因为太菜没有勇气通过堆排序手写优先队列),于是本着打擦边球也比写不出来强的心态,用stl进行了实现。

 1 int lastStoneWeight(vector<int>& stones) {
 2     priority_queue<int> q;
 3     int length = stones.size();
 4     for (int i = 0; i < length; i ++) {
 5         q.push(stones[i]);
 6     }
 7     while(q.size() >= 2) {
 8         int firstLarge = q.top();
 9         q.pop();
10         int secondLarge = q.top();
11         q.pop();
12         if (firstLarge == secondLarge) {
13             continue;
14         } else {
15             q.push(abs(firstLarge - secondLarge));
16         }
17     }
18     if (q.size() == 1) return q.top();
19     if (q.empty()) return 0;
20 }

 

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/last-stone-weight
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2019-11-07 16:48  xyy999  阅读(161)  评论(0)    收藏  举报