• 边工作边刷题:70天一遍leetcode: day 41-3


    Data Stream as Disjoint Intervals

    要点:因为data stream处理中任何中间结果interval之间都是disjoint的,所以可以直接用binary search tree(而不需要Interval tree)。BST是按interval start存储。

    • merge的方式:类似Insert Interval,但是更容易点。先和floor.end比较,然后变换插入Interval的start,然后比较higher.start,变换Interval的end。中间不插入会提前return。

    错误点:

    要点:上面的方法是在addNum时候merge,也可以在getIntervals的时候做。也就是说,addNum只是插入(val, val),可以用一个heap保持按start的顺序插入。然后就类似于merge intervals了,主要是可以merge的情况不pop,而更新heap顶interval.end。唯一差别就是+1也要merge。还有一个注意点,这题是stream,所以要save heap的元素,巧妙的方法是把输出赋值heap,因为输出还是维持start顺序的,和heap是一样的。只是merge了,再利用python heapq是在list上操作的。
    错误点:

    • heap是不能接受Interval object的,并且tuple是immutable的,所以要用list[list]表示heap中的interval,否则,TypeError: 'tuple' object does not support item assignment
    # Definition for an interval.
    # class Interval(object):
    #     def __init__(self, s=0, e=0):
    #         self.start = s
    #         self.end = e
    
    from heapq import *
    
    class SummaryRanges(object):
    
        def __init__(self):
            """
            Initialize your data structure here.
            """
            self.intervals = []
            self.res = []
    
        def addNum(self, val):
            """
            :type val: int
            :rtype: void
            """
            heappush(self.intervals, [val, val])
    
        def getIntervals(self):
            """
            :rtype: List[Interval]
            """
            res = []
            while self.intervals:
                top = heappop(self.intervals)
                if res and top[0]<=res[-1][1]+1:
                    res[-1][1]=max(res[-1][1], top[1]) # error 2: TypeError: 'tuple' object does not support item assignment
                else:
                    res.append([top[0], top[1]])
            
            self.intervals = res
            return [Interval(i[0], i[1]) for i in res]
    
    
    # Your SummaryRanges object will be instantiated and called as such:
    # obj = SummaryRanges()
    # obj.addNum(val)
    # param_2 = obj.getIntervals()
    
  • 相关阅读:
    代码编译时JDK版本和运行时JDK版本不一致启动项目报错
    Apache 环境变量配置
    Android NDK 环境变量配置
    Android SDK 环境变量配置
    JAVA 环境变量配置
    FFmpeg Download
    JAVA SE Download
    VS 2015 Download
    BASS HOME
    C++11的闭包(lambda、function、bind)
  • 原文地址:https://www.cnblogs.com/absolute/p/5690297.html
Copyright © 2020-2023  润新知