赞
踩
当我看到这道题目的时候,第一时间想到的是: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);
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。