leetcode 218 天际线问题变形

原答案有点问题, 面试官给出的答案是要求求出所有边界线,包括各种拐点,收尾两个0点。

class Solution:
    def getSkyline(self, buildings):
        """
        :type buildings: List[List[int]]
        :rtype: List[List[int]]
        """
        sdict = {}
        for lou in buildings:
            for x in range(lou[0], lou[1]+1):
                if x not in sdict.keys():
                    sdict[x] = [lou[2]]
                else:
                    sdict[x].append(lou[2])
        
        left = min(sdict.keys())
        right = max(sdict.keys())
        
        res = []
        for x in range(left, right + 1):
            if x in sdict.keys():
                res.append([x, max(sdict[x])])
            else:
                res.append([x, 0])
        
        
        res_ = []
        for i in range(1, len(res) - 1):
            res_.append(res[i-1])
            if res[i][0] != res[i-1][0] and res[i][1] != res[i-1][1]:
                if res[i][1] > res[i-1][1]:
                    res_.append([res[i][0], res[i-1][1]])
                else:
                    res_.append([res[i-1][0], res[i][1]])
        res_.append(res[-1])
        
        res = res_
        
        invalid_cord = []
        
        for x in range(1, len(res) -1):
            if res[x][1] == res[x-1][1] and res[x][1] == res[x+1][1]:
                invalid_cord.append(res[x])
        
        res = [c for c in res if c not in invalid_cord]
        
        res = [[left, 0]] + res + [[right , 0]]
        
        print(res)

转载于:https://www.cnblogs.com/theodoric008/p/8684684.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值