news 2026/5/10 12:43:44

单调栈:高效解决区间极值问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单调栈:高效解决区间极值问题

一、什么是单调栈

单调栈本质:栈内元素保持严格递增 或 严格递减

  • 单调递增栈:从栈底到栈顶元素越来越大
  • 单调递减栈:从栈底到栈顶元素越来越小

核心作用:快速找每个元素左边 / 右边 第一个比它大 / 小的元素普通暴力两层循环 O (n²),单调栈直接 O (n) 秒杀。

二、单调栈工作规则

单调递增栈为例:

  1. 遍历每个元素
  2. 栈不为空,且当前元素破坏递增规则,不断弹出栈顶
  3. 弹出时,就找到了被弹出元素的右侧最近更大 / 更小值
  4. 把当前元素压入栈
  5. 维持栈内单调性不变

三、单调栈通用刷题模板(必背)

// 单调栈通用模板 for(int i = 0; i < n; i++) { // 不满足单调性就一直弹出 while(!st.empty() && nums[i] 满足弹出条件) { // 记录答案:栈顶元素的右侧答案是 nums[i] int top = st.top(); st.pop(); // 业务逻辑处理 } st.push(i); // 存下标,方便计算距离 }

技巧:栈里一般存数组下标,通过下标取值,方便求区间长度。

四、两种单调栈区别

1. 单调递增栈

栈底→栈顶:从小到大适用:找右边第一个比自己小的元素

2. 单调递减栈

栈底→栈顶:从大到小适用:找右边第一个比自己大的元素

五、经典例题:每日温度(LeetCode 739)

题目大意

给定温度数组,对于每一天,求出还要过几天才会出现更高温度;没有填 0。

思路

典型单调递减栈模板题:遍历温度,维持栈内温度递减;遇到比栈顶大的温度,弹出并计算天数差。

完整可运行代码

#include <iostream> #include <vector> #include <stack> using namespace std; vector<int> dailyTemperatures(vector<int>& temperatures) { int n = temperatures.size(); vector<int> res(n, 0); stack<int> st; for(int i = 0; i < n; ++i) { // 破坏递减,开始弹出 while(!st.empty() && temperatures[i] > temperatures[st.top()]) { int idx = st.top(); st.pop(); res[idx] = i - idx; } st.push(i); } return res; } int main() { vector<int> t = {73,74,75,71,69,72,76,73}; vector<int> ans = dailyTemperatures(t); for(int x : ans) { cout << x << " "; } return 0; }

六、单调栈高频适用题型

  1. 每日温度、下一个更大元素
  2. 柱状图中最大矩形(大厂高频)
  3. 接雨水难题
  4. 去除重复字母、字典序最小子序列
  5. 区间最值问题

七、新手易错点

  1. 分不清该用递增还是递减栈
  2. 栈中存数值而不是下标,无法算距离
  3. while 循环条件写反,破坏单调性
  4. 只懂模板,不会套到具体题目

八、今日总结

  1. 单调栈 = 栈内保持递增 / 递减顺序
  2. 核心价值:O (n) 找左右最近大小元素
  3. 刷题套路:存下标 + while 弹栈 + 记录答案
  4. 每日温度是入门模板,背熟可通杀同类题
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 12:40:19

PyTorch单机多卡训练:除了DataParallel,试试更高效的DistributedDataParallel (DDP) 及CUDA_VISIBLE_DEVICES的进阶用法

PyTorch单机多卡训练&#xff1a;从DataParallel到DistributedDataParallel的深度迁移指南 当你面对一个需要数天才能完成训练的深度学习模型时&#xff0c;单卡GPU的算力往往成为瓶颈。我曾在一个图像分割项目中使用DataParallel进行多卡训练&#xff0c;本以为能线性提升速度…

作者头像 李华
网站建设 2026/5/10 12:37:44

3分钟搞定Calibre电子书元数据:calibre-douban插件终极指南

3分钟搞定Calibre电子书元数据&#xff1a;calibre-douban插件终极指南 【免费下载链接】calibre-douban Calibre new douban metadata source plugin. Douban no longer provides book APIs to the public, so it can only use web crawling to obtain data. This is a calibr…

作者头像 李华
网站建设 2026/5/10 12:37:41

漏斗之内——Infoseek舆情系统中“降噪”与“聚焦”的技术逻辑

海量信息过载语境下的舆情监测&#xff0c;本质上是在解决一个信号处理问题&#xff1a;如何从高噪声背景中提取出低强度的有效信号。Infoseek舆情系统的技术架构中&#xff0c;对这一问题的回应集中体现在其“分层降噪”和“动态聚焦”两个核心模块上。“分层降噪”解决的是“…

作者头像 李华
网站建设 2026/5/10 12:37:39

Docketeer:轻量级Docker容器监控与管理面板的部署与实战

1. 项目概述&#xff1a;一个为容器世界打造的“仪表盘”如果你和我一样&#xff0c;日常工作中需要和Docker、Kubernetes这些容器技术打交道&#xff0c;那你一定经历过这样的场景&#xff1a;终端里敲着docker ps、docker logs、docker stats来回切换&#xff0c;只为搞清楚某…

作者头像 李华
网站建设 2026/5/10 12:36:45

5G网络“自动驾驶”实战:手把手理解O-RAN RIC中的xApp与冲突缓解机制

5G网络“自动驾驶”实战&#xff1a;O-RAN RIC中的xApp冲突仲裁与协同优化 当五个交通信号灯同时指挥同一个路口时会发生什么&#xff1f;这正是5G O-RAN网络中多个xApp争夺无线资源控制权时面临的现实挑战。在东京某商业区实测中&#xff0c;三个未经协调的xApp同时调整基站参…

作者头像 李华
网站建设 2026/5/10 12:33:35

AI工具搭建自动化视频生成协作编辑

# AI工具搭建自动化视频生成协作编辑&#xff1a;从实践出发的深度解析 1. 它是什么 去年团队接了个项目&#xff0c;要批量制作产品短视频&#xff0c;人手不够&#xff0c;剪辑师熬了两周就跑了两个。后来我们搭了一套东西&#xff0c;算是把这事给解决了。 这套东西本质上是…

作者头像 李华