算法日常・每日刷题--<优先级队列>1 1046. 最后一块石头的重量 - 力扣LeetCode一、题目题意给定一堆重量为正整数的石头每一轮操作规则选出当前两块最重的石头记重量x ≤ y若x y两块石头全部粉碎无剩余若x ! y轻的x完全粉碎重的y变成y - x放回石头堆 重复循环直到石头堆最多只剩 1 块返回剩余石头重量无石头则返回 0。示例推演举个直观例子输入[2,7,4,1,8,1]最重两块8、7 →8-71剩余[2,4,1,1,1]最重两块4、2 →4-22剩余[2,1,1,1]最重两块2、1 →2-11剩余[1,1,1]最重两块1、1 → 全部粉碎剩余[1]最终返回1二、解题核心思路我们需要每次快速取出最大值最优数据结构大顶堆最大堆将所有石头重量入堆堆顶永远是当前最重石头循环取出前两大石头y、xy ≥ x若差值不为 0把y-x重新丢回堆堆内石头数量 ≤1 时停止循环堆空返回 0否则返回堆顶元素。class Solution { public: int lastStoneWeight(vectorint stones) { priority_queueint heap; for(auto e:stones) { heap.push(e); } while(heap.size()1) { int aheap.top();heap.pop(); int bheap.top();heap.pop(); if(a!b) { heap.push(abs(a-b)); } } if(heap.size()) return heap.top(); return 0; } };