给定 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)),
);
}