Halve Array Sum (Max-Heap)

LeetCode 2208 用大根堆贪心:每次把当前最大值减半。

#resource / algorithm #type / howto #status / growing #ds / heap #algo / greedy

[!info] related notes 算法面试题型 MOC 堆常见题

Halve Array Sum (Max-Heap)

LeetCode: https://leetcode.cn/problems/minimum-operations-to-halve-array-sum/

思路

要让总和尽快下降,贪心每次选择当前最大的数减半。

  • 用大根堆维护当前数值。
  • 目标是让累计减少量 reduced >= sum / 2

Java Template

import java.util.*;

class Solution {
    public int halveArray(int[] nums) {
        PriorityQueue<Double> heap = new PriorityQueue<>(Collections.reverseOrder());
        double sum = 0;
        for (int v : nums) {
            sum += v;
            heap.add((double) v);
        }
        double target = sum / 2.0;
        double reduced = 0;
        int ops = 0;
        while (reduced < target) {
            double x = heap.poll();
            double half = x / 2.0;
            reduced += half;
            heap.add(half);
            ops++;
        }
        return ops;
    }
}
创建于 2026/3/16 更新于 2026/5/27