每日温度——单调栈

73 阅读1分钟

(单调栈即站内元素维护的时候,满足单调递增或单调递减)

image.png

方法1,单调栈:

  1. 答案长度已知,所以创建返回值ans时,用make直接把长度和容量取好
  2. 创建一个stack(用来存储元素的下标)
  3. 遍历temperatures,与栈顶元素比较,如果栈顶元素小则弹出,直到栈为空或栈顶原元素更大,此时将遍历元素压入栈顶(也就是温度低的弹出,温度高的接着等比自己温度更高的元素出现后再弹出)
  4. 弹出元素前将元素下标对应于ans的下标中,而ans对应的值则是,遍历元素的下标减去弹出元素的下标
  5. 遍历结束后,依旧未弹出的元素则说明这些元素后面没有出现更高温度,故而ans这些下标都为0,也就是默认的ans的值,也不需要修改
func dailyTemperatures(ts []int) []int {
    n := len(ts)
    ans := make([]int,n)
    stack := []int{}
    for i := 0; i < n; i++ {
        for len(stack) > 0 && ts[i] > ts[stack[len(stack)-1]] {
            a := stack[len(stack)-1]    //不用这个变量也可以
            ans[a] = i - a 
            stack = stack[:len(stack)-1]
        }
        stack = append(stack,i)
    }
    return ans
}