问题陈述:某个一维景观中有N栋建筑物。每个建筑物的高度由hi,i∈[1,N]给出。如果您加入K个相邻建筑物,它们将形成一个面积为K×min的实心矩形(hi,hi + 1,...,hi + k-1)。
鉴于N栋建筑物,找到连续建筑物形成的最大固体区域。
以下是我的解决方案。它看起来不错,但测试用例却失败了。 任何人都可以告诉我下面的解决方案有什么问题。
TCO.loadPubKey('sandbox', function() { // for sandbox environment
publishableKey = //your public key
});
答案 0 :(得分:1)
除了蛮力之外,还有方式更快的解决方案,只需将每个建筑物映射到它的对抗件就像这样:
_____
_____| |
______|<--||-->|_____
|<---||---||---||-->|
| || || || |
现在找到最大区域非常简单:
int getMaxArea(int[] in)
map height_to_maxw
stack last_height
stack at_pos
int max_area = 0
for int i in [0 , length(in))
if !last_heigth.isEmpty()
while last_height.peek() > in[i]
int l_h = last_height.pop()
int l_w = i - at_pos.pop()
if l_h * l_w > max_area
max_area = l_h * l_w
//check if the widest area is the greatest
int h = min(in[0] , in[length(in) - 1])
if h * length(in) > max_area
max_area = h * length(in)
return max_area