我试图了解天际线问题。给定n
矩形建筑,我们需要计算天际线。我无法理解这个问题的输出。
输入:(1,11,5),(2,6,7),(3,13,9),(12,7,16),(14,3,25),(19,18, 22),(23,13,29),(24,4,28)}
输出天际线:(1,11),(3,13),(9,0),(12,7),(16,3),(19,18),(22,3),(25 ,0)
输出为(xaxis, height)
对。为什么第三对(9,0)
?如果我们看到天际线图,则x轴值9的高度为13,而不是0.为什么它显示0?换句话说,如果我们选择第一个建筑物(输入(1,11,5)
),则输出为(1, 11)
,(5, 0)
。你们能解释为什么它是(5,0)
而不是(5,11)
吗?
答案 0 :(得分:0)
将屋顶间隔视为左侧封闭,右侧打开。
答案 1 :(得分:0)
您的输出并不表示“在x处高度为y”,而是“在x处高度变为y”。
答案 2 :(得分:0)
使用扫描线算法;这是我的python版本解决方案:
class Solution:
# @param {integer[][]} buildings
# @return {integer[][]}
def getSkyline(self, buildings):
if len(buildings)==0: return []
if len(buildings)==1: return [[buildings[0][0], buildings[0][2]], [buildings[0][1], 0]]
points=[]
for building in buildings:
points+=[[building[0],building[2]]]
points+=[[building[1],-building[2]]]
points=sorted(points, key=lambda x: x[0])
moving, active, res, current=0, [0], [],-1
while moving<len(points):
i=moving
while i<=len(points):
if i<len(points) and points[i][0]==points[moving][0]:
if points[i][1]>0:
active+=[points[i][1]]
if points[i][1]>current:
current=points[i][1]
if len(res)>0 and res[-1][0]==points[i][0]:
res[-1][1]=current
else:
res+=[[points[moving][0], current]]
else:
active.remove(-points[i][1])
i+=1
else:
break
if max(active)<current:
current=max(active)
res+=[[points[moving][0], current]]
moving=i
return res
答案 3 :(得分:0)
static long largestRectangle(int[] h) {
int k=1;
int n=h.length;
long max=0;
while(k<=n){
long area=0;
for(int i=0;i<n-k+1;i++){
long min=Long.MAX_VALUE;
for(int j=i;j<i+k;j++){
//System.out.print(h[j]+" ");
min=Math.min(h[j],min);
}
// System.out.println();
area=k*min;
//System.out.println(area);
max=Math.max(area,max);
}
//System.out.println(k);
k++;
}
return max;
}