题目:
题解:
class Solution:def getSkyline(self, buildings: List[List[int]]) -> List[List[int]]:buildings.sort(key=lambda bu:(bu[0],-bu[2],bu[1]))buildings.append([inf,inf,inf])heap = [[-inf,-inf,-inf]]ans = []for l,r,h in buildings:if heap[0][2] < l:topRight = heappop(heap)[2]while heap and topRight < l:if heap[0][2] > topRight:# 建筑群内有较较矮的建筑宽度比高的大,对齐进行切块top = heappop(heap)top[1], topRight = topRight, top[2]# 如果新的切块也覆盖到新建筑,不需要再放入了if topRight >= l: heappush(heap, top)if ans[-1][1] != -top[0]: ans.append([top[1], -top[0]])else: heappop(heap)if not heap: ans.append([topRight, 0])if not heap or h > -heap[0][0]: ans.append([l, h])if heap and heap[0][0] == -h and heap[0][2] < r: heap[0][2] = relse: heappush(heap, [-h,l,r])return ans[1:-1]