本题是力扣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> >