1962. 移除石子使总数最小
当我看到这道题目的时候,第一时间想到的是:while循环 + sort,时间复杂度 k*nlogn。题目要求执行k次操作后,剩下狮子的最小总数,我们是否可以考虑维护一个堆呢?堆顶值最大,只要对堆顶做操作就行了。
class Solution {
public:int minStoneSum(vector<int>& p, int k) {make_heap(p.begin(), p.end());while (k-- && p[0] != 1){pop_heap(p.begin(), p.end());p.back() -= p.back() / 2;push_heap(p.begin(), p.end());}return accumulate(p.begin(), p.end(), 0);}
};