LeetCode 2208. 将数组和减半的最少操作次数

题目链接:

力扣icon-default.png?t=M276https://leetcode-cn.com/problems/minimum-operations-to-halve-array-sum/ 

LeetCode 2208. 将数组和减半的最少操作次数_第1张图片

【分析】按照从小到大的顺序排序,每次弹出最大的元素来减半再将减半后的元素插入回去,典型的优先队列的应用。

class Solution {
    public int halveArray(int[] nums) {
        int ans = 0;
        double sum = 0, t = 0, max;
        PriorityQueue 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;
    }
}

 

你可能感兴趣的:(LeetCode,leetcode,优先队列)