跳过正文
  1. 全部/
  2. 笔记/
  3. LeetCode/

015 单调栈

单调栈:快速找到每个元素左边/右边第一个比它大或小的元素

  • 左:<
  • 右:≤
func largestRectangleArea(heights []int)(res int ){
    n := len(heights)
    stack := []int{-1}
    left, right := make([]int,n), make([]int,n)
    for index, val := range heights {
        for len(stack) > 1 && val <= heights[stack[len(stack)-1]] {
            right[stack[len(stack)-1]] = index
            stack = stack[:len(stack)-1]
        }
        left[index] = stack[len(stack)-1]
        stack = append(stack, index)
    }
    for _, i := range stack[1:]{
        right[i] = n
    }
    return
}
Reply by Email