鉴于N栋建筑物,找到连续建筑物形成的最大固体区域

时间:2015-10-08 15:36:01

标签: algorithm data-structures stack dynamic-programming

问题陈述:某个一维景观中有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
});

1 个答案:

答案 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