将数组和减半的最少操作次数
力扣链接:2208. 将数组和减半的最少操作次数
题目描述
给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。(注意,在后续操作中你可以对减半过的数继续执行操作)
请你返回将 nums 数组和 至少 减少一半的 最少 操作数。
示例
Java代码(贪心+优先队列)
class Solution {
public int halveArray(int[] nums) {
int n = nums.length;
PriorityQueue<Double> pq = new PriorityQueue<Double>((x, y) -> y.compareTo(x));
double sum = 0.0;
for (int i = 0; i < n; i++) {
pq.offer(new Double(nums[i]));
sum += (double)nums[i];
}
double s = 0.0;
int res = 0;
while (s < sum) {
double num = pq.poll();
s += num;
pq.offer(num / 2);
res++;
}
return res;
}
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-operations-to-halve-array-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。