lc-go/solutions/0/q84/solution.go

30 lines
692 B
Go

// Package q84 implements a solution for https://leetcode.com/problems/largest-rectangle-in-histogram/
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