lc-go/solutions/0/q84/solution.go
2026-02-01 14:56:08 +09:00

29 lines
589 B
Go

package q84
func largestRectangleArea(heights []int) int {
var largest int
st := make([][2]int, 0, 256) // x index, height
for x, h := range heights {
minX := x
for len(st) > 0 && st[len(st)-1][1] > h {
largest = max(largest, st[len(st)-1][1]*(x-st[len(st)-1][0]))
minX = min(minX, st[len(st)-1][0])
st = st[:len(st)-1]
}
if len(st) > 0 && st[len(st)-1][1] == h {
continue
}
st = append(st, [2]int{minX, h})
}
for i := range st {
x, h := st[i][0], st[i][1]
largest = max(largest, h*(len(heights)-x))
}
return largest
}
var _ = largestRectangleArea