给出n个数,现在要将这n个数合并成一个数,每次只能选择两个数a,b合并,每次合并需要消耗a+b的能量,输出将这n个数合并成一个数后消耗的最小能量。
class Solution:
"""
@param numbers: the numbers
@return: the minimum cost
"""
def mergeNumber(self, numbers):
# Write your code here
if len(numbers) == 1:
return 0
sum = 0
while len(numbers) != 1:
numbers.sort()
new_num = numbers.pop(0) + numbers.pop(0)
sum += new_num
numbers.append(new_num)
return sum
超时,寻找其他方法。
用堆排序
import heapq
class Solution:
"""
@param numbers: the numbers
@return: the minimum cost
"""
def mergeNumber(self, numbers):
# Write your code here
if len(numbers) == 1:
return 0
sum = 0
heapq.heapify(numbers)
while len(numbers) != 1:
a = heapq.heappop(numbers)
b = heapq.heappop(numbers)
sum += a + b
heapq.heappush(numbers,a + b)
return sum