zoukankan      html  css  js  c++  java
  • LeetCode | 739.每日温度

    根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。

    例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

    提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。

    solution:

    什么是单调栈?
    单调栈分为单调递增栈和单调递减栈,单调递增栈即栈内元素保持单调递增的栈,同理单调递减栈即栈内元素保持单调递减的栈,跟单调队列差不多,但是只用到它的一端,利用它可以用来解决一些ACM/ICPC和OI的题目,如RQNOJ 的诺诺的队列等。

    范式:
    单调递增栈

    for(int i = 0; i < T.size(); i++){
      while(! stk.empty() && stk.top() > T[i]){
        ​stk.pop();
      }
      stk.push(A[i]);
    }
    

    单调递减栈

    for(int i = T.size() - 1; i >= 0; i--){
      while(! stk.empty() && T[i] >= stk.top()){
        stk.pop();
      }         
      stk.push(i);
    }
    

    单调栈的作用:


    可以以 O(1) 的时间复杂度得知某个位置左右两侧比他大(或小)的数的位置,当你需要高效率获取某个位置左右两侧比他大(或小)的数的位置的的时候就可以用到单调栈。

    求解数组中元素右边第一个比它小的元素的下标,从前往后,构造单调递增栈;
    求解数组中元素右边第一个比它大的元素的下标,从前往后,构造单调递减栈;
    求解数组中元素左边第一个比它小的元素的下标,从后往前,构造单调递减栈;
    求解数组中元素左边第一个比它小的元素的下标,从后往前,构造单调递增栈


    转载自:https://www.jianshu.com/p/43bb5204bc6f
  • 相关阅读:
    [转载]centos 6.4中git如何正常显示中文
    [转载] 在Linux中,开机自动运行普通用户的脚本程序
    elasticsearch中的filter与aggs
    GET和POST的区别
    Java NIO读书笔记2
    Java NIO读书笔记
    java之并发
    java中参数传递
    java中final关键字
    Java类的初始化过程及清理
  • 原文地址:https://www.cnblogs.com/simplepaul/p/12316228.html
Copyright © 2011-2022 走看看