力扣1962. 移除石子使总数最小,学习STL最大堆的使用
堆的使用
堆的构建:
make_heap(nums.begin(), nums.end()); 或 make_heap(nums.begin(), nums.end(), less<int>():最大堆/greater<int>:最小堆); 默认为最大堆,第三个为可选操作
堆的调整:
pop_heap(nums.begin(), nums.end(), less<int>()); 将堆中的堆顶元素放到最后一位,然后重建堆(不包括最后一位) 如果要插入元素 push_back(element);在容器最后一位添加元素 push_heap(nums.begin(), nums.end());当有元素重新插入容器队尾时,重新调整堆序
代码
class Solution { public: int minStoneSum(vector<int>& piles, int k)
{ make_heap(piles.begin(),piles.end());//建堆 for(int i = 0;i<k;i++) { pop_heap(piles.begin(),piles.end()); //将堆顶元素放到最后一位 piles.back() -= piles.back() / 2; //把最后一位元素/2 push_heap(piles.begin(),piles.end()); //调整堆序 } return accumulate(piles.begin(),piles.end(),0); //accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。 } };

浙公网安备 33010602011771号