题目描述:
给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。(注意,在后续操作中你可以对减半过的数继续执行操作)
请你返回将 nums 数组和 至少 减少一半的 最少 操作数。
示例:
解题思路:
通过优先队列将数组进行降序排列,每次取最大值进行减半操作,直到nums 数组和至少减少一半的最少操作数。
相关代码:
class Solution {
public int halveArray(int[] nums) {
PriorityQueue<Double> doublenums = new PriorityQueue<Double>((a, b)->b.compareTo(a));
int n=0;
double sum=0.0,sum2=0.0,x=0.0;
for(int num:nums) {
doublenums.offer((double) num);
sum+=num;
}
while(sum2<sum/2) {
x=doublenums.poll();
sum2+=x/2;
doublenums.offer(x/2);
n++;
}
return n;
}
}