我们可以使用堆来解决这个问题,使用一个最小堆来存储当前的数组。我们还需要一个辅助堆,将每次从数组中删除的元素的成本添加到辅助堆中。然后,我们可以继续从堆顶开始执行删除操作,直到我们得到一个空数组。删除时,我们需要根据操作的类型计算删除成本。
以下是Python代码实现:
import heapq
def min_cost_to_empty_array(arr):
heap = []
for num in arr:
heapq.heappush(heap, num)
helper_heap = []
cost = 0
while len(heap) > 0:
if len(heap) == 1:
heapq.heappush(helper_heap, (0, heapq.heappop(heap)))
else:
first = heapq.heappop(heap)
if len(heap) == 1:
heapq.heappush(helper_heap, (0, first+heapq.heappop(heap)))
else:
middle = heapq.heappop(heap)
last = heapq.heappop(heap)
heapq.heappush(helper_heap, (0, first+middle+last))
heapq.heappush(heap, middle)
cost += helper_heap[0][1]
heapq.heappop(helper_heap)
return cost
arr = [1, 2, 3, 4, 5]
print(min_cost_to_empty_array(arr)) # 33
上一篇:不断取样直到获得所有唯一值。
下一篇:不断失败的图像上传