题目
给你一个正整数数组 nums 。每一次操作中,你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。(注意,在后续操作中你可以对减半过的数继续执行操作)
请你返回将 nums 数组和 至少 减少一半的 最少 操作数。
算法思路:
贪心算法+小顶堆
1.我们每次都减少数组中最大的数字的一半
2.通过小顶堆的push,pop操作,实现快速取最大值
代码:
class Solution:
def halveArray(self, nums: List[int]) -> int:
pd = []
for num in nums:
heappush(pd,-num)
res = 0
S = sum(nums)
s = 0
while s<S/2:
x = -heappop(pd)
x/=2
heappush(pd,-x)
s+=x
res+=1
return res