LintCode 486 [Merge k Sorted Arrays]

原题

将 k 个排序数组合并为一个大的排序数组。

样例
给出下面的 3 个排序数组:

[ 
 [1, 3, 5, 7], 
 [2, 4, 6], 
 [0, 8, 9, 10, 11]
]

合并后的大数组应为:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

解题思路

  • 本题类似于Merge k Sorted Lists。与之不同的是,arrays不能直接通过一个值找到相邻的下一个值,所以需要建立一个set(数值,数组编号,index)
  • 这样,我们就拥有了当前数组是Arrays中的哪一个数组,并且知道了是这个数组的第几个数字
  • 首先创建一个最小堆,把每一个array的第一个数字放入堆中,然后取最小,把最小值放入res中,并把最小值所在数组中的相邻的数放入堆中

注意
使用heapq性能优于封装的Queue.PriorityQueue,本题使用Queue.PriorityQueue会TLE

完整代码

import heapq

class Solution:
    # @param {int[][]} arrays k sorted integer arrays
    # @return {int[]} a sorted array
    def mergekSortedArrays(self, arrays):
        # Write your code here
        result = []
        heap = []
        for index, array in enumerate(arrays):
            if len(array) == 0:
                continue
            heapq.heappush(heap, (array[0], index, 0))
             
        while len(heap):
            val, arrayNum, index = heapq.heappop(heap)
            result.append(val)
            if index + 1 < len(arrays[arrayNum]):
                heapq.heappush(heap, (arrays[arrayNum][index + 1], arrayNum, index + 1))
            
        return result
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,932评论 0 33
  • 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对...
    东经315度阅读 2,212评论 0 8
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,658评论 0 3
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,876评论 11 349
  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 11,494评论 0 5

友情链接更多精彩内容