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