假设我们有一个称为nums的数字列表。我们可以通过取任意两个数字,删除它们并将其总和附加到末尾来减少num的长度。进行此操作的成本是我们删除的两个整数的总和。我们必须找到将nums减少为一个整数的最小总成本。
因此,如果输入类似于nums = [2、3、4、5、6],那么输出将为45,因为我们取2和3然后删除以获得[4、5、6、5],那么我们取4和5,然后删除以获得[6,5,9],然后取6和5,然后删除它们,我们得到[9,11],最后删除9和11,我们得到19。所以总和是45。
为了解决这个问题,我们将遵循以下步骤-
通过使用以nums表示的元素进行堆
回答:= 0
当nums的大小> = 2时,执行
一个:=堆nums最上面的元素
b:=堆编号的最高元素
ans:= ans + a + b
在堆编号中插入a + b
返回ans
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums): import heapq heapq.heapify(nums) ans = 0 while len(nums) >= 2: a = heapq.heappop(nums) b = heapq.heappop(nums) ans += a + b heapq.heappush(nums, a + b) return ans ob = Solution()nums = [2, 3, 4, 5, 6] print(ob.solve(nums))
[2, 3, 4, 5, 6]
输出结果
45