当前位置: 首页 > news >正文

代码随想录算法【Day47】

单调栈

单调栈:保持栈里面的元素是递增的或者递减的

问题场景:求当前元素左边或者右边第一个比当前元素大或者小的元素

单调栈的作用:存放遍历过的元素的下标

遍历过程:

求当前元素右边第一个比当前元素大的元素,单调栈内的元素(从栈顶到栈底)为单调递增。

使用result[i]来记录结果,表示下标为i的元素与右边第一个比它大的元素的距离。

若当前遍历的元素没有栈顶元素大,则入栈;若当前遍历的元素比栈顶元素大,则栈顶元素弹出,同时更新刚刚被弹出的栈顶元素的result[i]值

739.每日温度

  • 情况一:当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况:直接入栈

  • 情况二:当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况:直接入栈

  • 情况三:当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况:当前元素与栈顶元素进行比对,若大于栈顶元素,则更新result数组

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) {
        stack<int> st;
        vector<int> result(T.size(), 0);
        st.push(0);
        for(int i = 1; i < T.size(); i++){
            if(T[i] <= T[st.top()]){
                st.push(i);
            }
            else{
                while(!st.empty() && T[i] > T[st.top()]){
                    result[st.top()] = i - st.top();
                    st.pop();
                }
                st.push(i);
            }
        }
        return result;
    }
};

相关文章:

  • 解决`Illegal group reference: group index is missing`的两种方式
  • 【linux学习指南】⽣产者消费者模型
  • python电影数据分析及可视化系统建设
  • 深度学习在天文观测中的应用:解锁宇宙的奥秘
  • `fi` 是 Bash 脚本中用来结束 `if` 条件语句块的关键字
  • 数位dp入门详解
  • [Vivado报错] [Common 17-55]‘set_property‘ expects at least one object
  • 【数据库维护】Clickhouse数据库维护关键系统表相关指标说明,支撑定位慢SQL及多实例场景下分析各实例运行情况
  • 【Java基础-46.1】Java 中创建自定义泛型类及其应用
  • 【机器学习】常见采样方法详解
  • AtCoder - arc101_b Median of Medians 分析与解答
  • 2009年下半年软件设计师上午真题的知识点整理(附真题及答案解析)
  • Kubernetes-master 组件
  • 25/2/16 <算法笔记> MiDas原理
  • ElasticSearch详解
  • 【开源免费】基于Vue和SpringBoot的美食烹饪互动平台(附论文)
  • 【HUSTOJ 判题机源码解读系列03】judge.cc 源码详细注释
  • 端到端测试利器:Playwright入门教程
  • 力扣 66.加一 (Java实现)
  • ROS应用之SwarmSim在ROS 中的协同路径规划
  • 玉渊谭天丨中方为何此时同意与美方接触?出于这三个考虑
  • 夜读丨喜马拉雅山的背夫
  • 国家主席习近平同普京总统签署关于进一步深化中俄新时代全面战略协作伙伴关系的联合声明
  • 巴基斯坦信德省首府卡拉奇发生爆炸
  • 纪录片《中国》原班人马打造,《船山先生》美学再升级
  • 阿森纳被打得毫无脾气,回天无力的阿尔特塔只剩嘴硬