LeetCode 合并果子题解
LeetCode 合并果子题解题目描述将果子合并成一堆每次合并相邻的两堆合并的代价是两堆果子的重量之和。请问如何合并使得总代价最小示例输入nums [1, 2, 5, 10]输出37解题思路方法贪心 优先队列思路使用贪心算法每次合并重量最小的两堆果子。使用优先队列最小堆来维护果子的重量。每次取出重量最小的两堆合并并将新堆加入队列。复杂度分析时间复杂度O(n log n)。空间复杂度O(n)。代码实现import heapq def merge_stones(stones): heap stones[:] heapq.heapify(heap) total_cost 0 while len(heap) 1: first heapq.heappop(heap) second heapq.heappop(heap) cost first second total_cost cost heapq.heappush(heap, cost) return total_cost # 测试 def test_merge_stones(): stones [1, 2, 5, 10] print(merge_stones(stones)) # 输出37 if __name__ __main__: test_merge_stones()总结合并果子是贪心算法的典型应用每次合并重量最小的两堆果子使用优先队列来维护果子的重量。