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)