本题是力扣2208---点击跳转题目
思路:
要尽快的把数组和减小,那么每次挑出数组中最大的元素减半即可,由于每次都是找出最值元素,可以用优先队列来存储这些数组元素
每次取出最值,减半后再放入优先队列中,操作次数+1,直到数组和小于等于原总和的一半
代码:
class Solution {
public:
int halveArray(vector<int>& nums)
{
double sum = 0;
int cnt = 0;
priority_queue<double> pq;
for(int x : nums)
{
pq.push(x);
sum += x;
}
double cur = sum;
while(true)
{
double t = pq.top();
pq.pop();
t /= 2;
cur -= t; cnt++;
pq.push(t);
if(cur <= sum / 2) break;
}
return cnt;
}
};
tips:
STL中priority_queue默认是取出最大值,如果是需要取出最小值,则需要在定义时给定参数如下:
priority_queue<int, vector<int>, greater<int> >