📜  使用 heapq 在Python合并两个已排序的数组

📅  最后修改于: 2021-10-28 02:05:54             🧑  作者: Mango

给定两个已排序的数组,任务是以排序的方式合并它们。

例子:

Input :  arr1 = [1, 3, 4, 5]  
         arr2 = [2, 4, 6, 8]
Output : arr3 = [1, 2, 3, 4, 4, 5, 6, 8]

Input  : arr1 = [5, 8, 9]  
         arr2 = [4, 7, 8]
Output : arr3 = [4, 5, 7, 8, 8, 9]

此问题已有解决方案,请参阅合并两个已排序数组链接。我们将在Python使用heapq.merge()在一行代码中解决这个问题。

# Function to merge two sorted arrays
from heapq import merge
  
def mergeArray(arr1,arr2):
    return list(merge(arr1, arr2))
  
# Driver function
if __name__ == "__main__":
    arr1 = [1,3,4,5]  
    arr2 = [2,4,6,8]
    print (mergeArray(arr1, arr2))

输出:

[1, 2, 3, 4, 4, 5, 6, 8]

heapq 模块的属性?

该模块提供了堆队列算法的实现,也称为优先队列算法。
要创建堆,请使用初始化为 [] 的列表,或者您可以通过函数heapify() 将填充列表转换为堆。提供以下函数:

  • heapq.heappush(heap,item) :将值项推送到堆上,保持堆不变。
  • heapq.heappop(heap) :从堆中弹出并返回最小的项,保持堆不变。如果堆为空,则引发IndexError 。要访问最小的项目而不弹出它,请使用 heap[0]。
  • heapq.heappushpop(heap, item) :将item 推入堆,然后从堆中弹出并返回最小的 item。组合操作比 heappush() 更有效地运行,然后单独调用 heappop()。
  • heapq.heapify(x) :在线性时间内将列表 x 就地转换为堆。
  • heapq.merge(*iterables) :将多个排序的输入合并为一个排序的输出(例如,合并来自多个日志文件的带时间戳的条目)。返回排序值的迭代器。

    如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程