题目链接:
力扣https://leetcode-cn.com/problems/minimum-operations-to-halve-array-sum/
【分析】按照从小到大的顺序排序,每次弹出最大的元素来减半再将减半后的元素插入回去,典型的优先队列的应用。
class Solution {
public int halveArray(int[] nums) {
int ans = 0;
double sum = 0, t = 0, max;
PriorityQueue<Double> queue = new PriorityQueue<>(Comparator.reverseOrder());
int n = nums.length, i;
for(i = 0; i < n; i++){
queue.add((double)nums[i]);
sum += nums[i];
}
sum /= 2;
while(t < sum){
ans++;
max = queue.poll() / 2;
t += max;
queue.add(max);
}
return ans;
}
}