• 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
  • 相关阅读:
    [转][LeetCode]Longest Common Prefix ——求字符串的最长公共前缀
    [转]最长回文子串——4种解法
    [转]通过金矿模型介绍动态规划
    一句话说清楚什么是闭包函数
    [转]as3事件流机制彻底理解
    Eclipse 快捷键
    文件打包与解压缩
    第5节 环境变量与文件查找
    vim的多标签
    java思维导图
  • 原文地址:https://www.cnblogs.com/simplepaul/p/12316228.html
Copyright © 2020-2023  润新知