218. 天际线问题【力扣】

该博客讨论了如何解决天际线问题,即在第一象限中处理重叠矩形的轮廓。通过扫描线方法,将问题转化为在遍历过程中寻找关键点。使用平衡搜索树(高度表)存储有效高度,根据开始线和结束线更新关键点,并确定新的轮廓。在处理结束线时,若删除的高度大于剩余高度,则表明出现新的最大高度点。
摘要由CSDN通过智能技术生成

题意理解

第一象限有一组矩形框,相互可能重叠,求它的轮廓。

轮廓的定义:水平线段的左端点。

问题分析

图的问题通用的方法是扫描线。问题转化为,在遍历扫描线过程中查找关键点,决定轮廓。

分开始线,结束线处理,使用一个平衡搜索树(高度表)保存遍历过程中遇到的有效高度

从左至右依次遍历所有扫描线。

对于开始线,如果高度大于所有有效高度,是关键点。同时也是新的有效高度。

对于结束线,此高度失效,从高度表中删除此高度。如果删除的高度比剩余的高度都大,说明露出的新的最大高度也是关键点。

其他

链接

参考 https://www.youtube.com/watch?v=8Kd-Tn_Rz7s

private:
    multiset<int> heightSet; //保存高度集合(平衡搜索树)
    int max_height() {  //计算最高高度
        if (heightSet.empty()) {
            return 0;
        }
        return *heightSet.rbegin(); //(最后一个元素是最大元素)
    }
public:
    vector<vector<int>> getSkyline(vector<vector<int>>& buildings) {
        vector<vector<int>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值