leetcode(34)优先队列系列题目

218. 天际线问题

用SortedList存边界,每次删除或加入边界判断最高点是否变化

class Solution:
    def getSkyline(self, buildings: List[List[int]]) -> List[List[int]]:
        from sortedcontainers import SortedList
        change = []
        for l, r, h in buildings:
            change.append((l, -h))
            change.append((r, h))
        change.sort()
        pre = 0
        res = []
        s = SortedList([0])
        for i, h in change:
            if h < 0:
                s.add(h)  # 存入左边界
            else:
                s.remove(-h)  # 删除右边界
            cur_mx = -s[0]
            if cur_mx != pre:  # 存入或删除边界后可能发生改变
                pre = cur_mx
                res.append((i, cur_mx))
        return res

posted @ 2022-11-07 11:44  YTT77  阅读(18)  评论(0编辑  收藏  举报