zoukankan      html  css  js  c++  java
  • heap的使用——合并K个排序间隔列表,和merge K个有序数组是一样的

    577. 合并K个排序间隔列表

    中文
    English

    将K个排序的间隔列表合并到一个排序的间隔列表中,你需要合并重叠的间隔。

    样例

    样例1

    输入: [
      [(1,3),(4,7),(6,8)],
      [(1,2),(9,10)]
    ]
    输出: [(1,3),(4,8),(9,10)]
    

    样例2

    输入: [
      [(1,2),(5,6)],
      [(3,4),(7,8)]
    ]
    输出: [(1,2),(3,4),(5,6),(7,8)]
    
    """
    Definition of Interval.
    class Interval(object):
        def __init__(self, start, end):
            self.start = start
            self.end = end
    """
    import heapq
    
    
    class Solution:
        """
        @param intervals: the given k sorted interval lists
        @return:  the new sorted interval list
        """
        def mergeKSortedIntervalLists(self, intervals):
            # write your code here
            def append(arr, l, r):
                if not arr:
                    arr.append(Interval(l, r))
                    return
                
                if arr[-1].start <= l <= arr[-1].end:
                    arr[-1].end = max(r, arr[-1].end)
                else:
                    arr.append(Interval(l, r))
            
            q = []
            for i,arr in enumerate(intervals):
                if arr:
                    heapq.heappush(q, (intervals[i][0].start, intervals[i][0].end, i, 0))
            
            ans = []
            while q:
                l, r, i, j = heapq.heappop(q)
                append(ans, l, r)
                
                if j+1 < len(intervals[i]):
                    heapq.heappush(q, (intervals[i][j+1].start, intervals[i][j+1].end, i, j+1))
                    
            return ans
            
    
  • 相关阅读:
    前端大文件上传方法(深度好文)
    windows版idea 2018.3.5版 永久激活教程
    性能优化随笔
    使用java画一张海报
    Gson杂记录
    Gson转Map时,Int会变成double解决方法
    浅析VO、DTO、DO、PO的概念、区别和用处
    SpringCloud框架搭建+实际例子+讲解+系列五
    raid总结
    MD5与SHA1
  • 原文地址:https://www.cnblogs.com/bonelee/p/14316032.html
Copyright © 2011-2022 走看看