柱状图中最大的矩形

202 阅读1分钟

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。

PHP:(暴力解法 On2)

func largestRectangleArea(heights []int) int {
    max := 0
    for i := 0; i < len(heights); i ++ {
        minHeight := -1
        for j := i; j < len(heights); j ++ {
            if minHeight == -1 || heights[j] < minHeight {
                minHeight =  heights[j]
            }
            ares := (j - i + 1) * minHeight
            if (max < ares) {
                max = ares
            }
        }
    }
    return max
}

GO:(分治 Onlogn)

func largestRectangleArea(heights []int) int {
return int(maxAres(heights, 0, len(heights) - 1))
}

func maxAres(heights []int, start, end int) float64 {
    if (start > end) {
        return 0
    }
    minHeight := -1
    minIndex := 0
    for i := start; i <= end; i ++ {
        if minHeight == -1 || minHeight > heights[i] {
            minHeight = heights[i]
            minIndex = i
        }
    }
    return math.Max(float64(minHeight * (end - start + 1)), 
                math.Max(maxAres(heights, start, minIndex - 1),
                         maxAres(heights, minIndex + 1, end)),
                    );
}