查找在Python中将列表简化为一个整数的最低成本的程序

假设我们有一个称为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
猜你喜欢