1. 题意
给定一个整数数组,每次可以取出一个数累加并丢弃,并将该数的1/3 向上取整放回。
执行k次操作后的最大分数
2. 题解
每次取插入后的最大值,所以需要大根堆。
STL里面用priority_queue<int> pq
默认大根堆。
小根堆priority_queue<int, vector<int>, greater<> > pq
,可以直接用容器进行初始化。
priority_queue<int> pq(nums.begin(), nums.end())
class Solution {
public:
long long maxKelements(vector<int>& nums, int k) {
priority_queue< int, vector<int>, less<> > pq;
for ( auto &v : nums)
pq.push(v);
long long ans = 0;
for ( int i = 0; i < k; ++i) {
int v = pq.top();
pq.pop();
ans += v;
pq.push( (v + 2)/3);
}
return ans;
}
};