The Skyline Problem
Description:
Given N buildings in a x-axis,each building is a rectangle and can be represented by a triple (start, end, height),where start is the start position on x-axis, end is the end position on x-axis and height is the height of the building. Buildings may overlap if you see them from far away,find the outline of them。
An outline can be represented by a triple, (start, end, height), where start is the start position on x-axis of the outline, end is the end position on x-axis and height is the height of the outline.
Building Outline
Example
Given 3 buildings:
[
[1, 3, 3],
[2, 4, 4],
[5, 6, 1]
]
The outlines are:
[
[1, 2, 3],
[2, 4, 4],
[5, 6, 1]
]
Notice
Please merge the adjacent outlines if they have the same height and make sure different outlines cant overlap on x-axis.
Code:
1. 空间复杂度过高
import heapq
class Solution:
"""
@param buildings: A list of lists of integers
@return: Find the outline of those buildings
"""
def buildingOutline(self, buildings):
# write your code here
if not buildings:
return []
res = []
print(res)
area = [0]*max(max(_) for _ in buildings)
for i in buildings:
for j in range(i[0], i[1]):
area[j-1] = max(area[j-1], i[2])
start, end = 1, 2
print('area', area)
while end<=len(area):
while end<len(area) and area[start-1]==area[end-1]:
print('while', start, end)
end += 1
if area[start-1]!=0:
print('startend', start, end)
res.append([start, end, area[start-1]])
start = end
end += 1
print(res)
return res