力扣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带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。   } };

 

posted @ 2021-11-13 13:12  Akisumu  阅读(42)  评论(0)    收藏  举报