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 @   YTT77  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示