func largestRectangleArea(heights []int) int {
//头部添加一个元素0
heights = append([]int{0}, heights...)
//尾部添加一个元素0
heights = append(heights, 0)
n := len(heights)
stack := make([]int, n)
stack = append(stack, 0)
res := 0
for i := 1; i < n; i++ {
for heights[stack[len(stack)-1]] > heights[i] {
top := stack[len(stack)-1]
stack = stack[:len(stack)-1]
if len(stack) > 0 {
left := stack[len(stack)-1]
right := i
//求高度
h := heights[top]
//求宽度
w := right - left - 1
//求最大面积
res = max(res, h*w)
}
}
stack = append(stack, i)
}
return res
}
func max(a, b int) int {
if a > b {
return a
}
return b
}