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)
posted @ 2018-03-31 23:14  一条图图犬  阅读(197)  评论(0编辑  收藏  举报