1 from heapq import * 2 3 class Solution: 4 def getSkyline(self, LRH): 5 skyline = [] 6 i, n = 0, len(LRH) 7 liveHR = [] 8 while i < n or liveHR: 9 if not liveHR or i < n and LRH[i][0] <= -liveHR[0][1]: 10 x = LRH[i][0] 11 while i < n and LRH[i][0] == x: 12 heappush(liveHR, (-LRH[i][2], -LRH[i][1])) 13 i += 1 14 else: 15 x = -liveHR[0][1] 16 while liveHR and -liveHR[0][1] <= x: 17 heappop(liveHR) 18 height = len(liveHR) and -liveHR[0][0] 19 if not skyline or height != skyline[-1][1]: 20 skyline += [x, height], 21 return skyline
神题神解,
参考1:https://leetcode.com/problems/the-skyline-problem/discuss/61194/108-ms-17-lines-body-explained
参考2:https://briangordon.github.io/2014/08/the-skyline-problem.html