0
点赞
收藏
分享

微信扫一扫

单调栈问题分类和例题

Gaaidou 2022-03-12 阅读 26
golang

单调栈不需要太多的文字定义,单调栈三个字,你理解的是什么就是什么
关键是怎么解题
出现不满足单调的元素,那么从栈顶开始清算到满足单调为止

不满足者的出现,导致开始清算,清算了最后一个元素,可能按照不满足者的标准也可以刷新记录(可能往左延伸的)所以有这几类问题

  1. 往左延伸有意义的。
  2. 以及往左延伸无意义的

往左延伸无意义的

  1. 未来哪天比今天温度高

在这里插入图片描述

func dailyTemperatures(temperatures []int) []int {
    stack:=[]int{}
    res:=make([]int,len(temperatures))
    temperatures=append(temperatures,101)
    invalidIndex:=len(temperatures)-1
    index:=0
    for index<len(temperatures) {
		if len(stack)==0 || temperatures[index] <= temperatures[stack[len(stack)-1]]{
            stack=append(stack,index)
            index++
        }else{ //该温度比栈顶大,那么一直“清算”到栈顶小于等于该温度              
            for len(stack)>0{
                top:=stack[len(stack)-1]
                if temperatures[index]<=temperatures[top]{   //清算截止
                    stack=append(stack,index)
                    index++
                    break
                }
                if index==invalidIndex{ //大温度“清算”
                    res[top]=0
                }else{
                    res[top]=index-top
                }
                stack=stack[:len(stack)-1]
            }
        }
    }
    return res
}

往左延伸有意义的

计算最大矩形
区间和乘以区间最小值

举报

相关推荐

0 条评论