将数组和减半的最少操作【贪心2】

题目:将数组和减半的最少操作

将数组和减半的最少操作【贪心2】_第1张图片

贪心思路:每次挑选最大的数来减半。

 解法:贪心+大根堆

class Solution {
public:
    int halveArray(vector& nums) {
        priority_queue heap;
        double sum =0.0;
        for(int& x : nums)
        {
            heap.push(x);
            sum += x;
        }
        sum /= 2.0;
        int count = 0;
        while(sum > 0)
        {
            double t = heap.top()/2.0;
            heap.pop();
            sum -= t;
            count++;
            heap.push(t);
        }
        return count;
    }
};

证明

将数组和减半的最少操作【贪心2】_第2张图片 

你可能感兴趣的:(贪心,算法)