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

代码随想录算法【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;
    }
};

http://www.kler.cn/a/549238.html

相关文章:

  • Kimi k1.5:继Deepseek R1 后多模态 AI 的新标杆
  • 构建 LVS-DR 群集
  • gitlab Webhook 配置jenkins时“触发远程构建 (例如,使用脚本)”报错
  • 单位切换且后换算得方法
  • 前端知识速记:BFC与IFC
  • C/C++程序的内存是如何开辟的?
  • 【C++笔记】C++11的深度剖析(一)
  • 深入解析DNS:从域名到IP的寻址之旅
  • 深兰科技与银川市苏银产业园签署协议,共建AI装备西部产业基地
  • freertos源码分析DAY12 (软件定时器)
  • osgearth控件显示中文(八)
  • Audio-Visual Speech Enhancement(视听语音增强)领域近三年研究进展与国内团队及手机厂商动态分析
  • 【函数题】6-10 二分查找
  • 【LeetCode】438.找到字符串中所有的字母异位词
  • 请解释设备像素、CSS 像素、设备独立像素、DPR、PPI 之间的区别?
  • 详解如何使用Pytest内置Fixture tmp_path 管理临时文件
  • Redis之持久化
  • VUE3环境搭建
  • 【iOS】SwiftUI状态管理
  • Kotlin 2.1.0 入门教程(十八)函数式接口