func largestRectangleArea(heights []int) int {
heights = append(heights, 0)
//追加单个切片,并以...结尾
heights = append([]int{0}, heights...)
ans := 0
st := make([]int, 0)
n := len(heights)
for i := 0; i < n; i++ {
// 比栈顶元素小时 计算以柱子i为高度的矩形面积
for len(st) > 0 && heights[st[len(st)-1]] > heights[i] {
cur := st[len(st)-1]
st = st[:len(st)-1]
if len(st) == 0 {
break
}
left := st[len(st)-1]
right := i
ans = max(ans, heights[cur]*(right-left-1))
}
st = append(st, i)
}
return ans
}
07-02
406
10-09