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

单调栈详解

一、核心思想与特性

单调栈是一种特殊的栈结构,栈内元素保持单调递增或递减。其核心价值在于通过维护单调性,快速定位数组中元素的下一个更大/更小值,将暴力解法 O(n²) 优化至 O(n)

  • 核心操作
    • 扩张:遍历数组,将新元素与栈顶比较。
    • 收缩:若新元素破坏单调性,则弹出栈顶并记录解(如找到更大元素)。
    • 入栈:新元素入栈,维持单调性。
  • 存储索引而非值
    栈中存储元素索引而非值,便于计算距离或宽度。

二、单调栈的类型与选择

根据问题需求选择栈类型和遍历方向:

问题目标 栈类型 遍历方向 例子
右侧第一个更大元素 单调递减栈 正向遍历 [4,2,1][ -1,4,4]
右侧第一个更小元素 单调递增栈 反向遍历 [4,2,1][2,1,-1]
左侧第一个更大元素 单调递减栈 正向遍历 [1,2,4][-1,-1,-1]
左侧第一个更小元素 单调递增栈 正向遍历 [3,1,4][-1,-1,1]

口诀
找左侧 → 正向遍历;找右侧 → 反向遍历;
比它大 → 单调减;比它小 → 单调增。


三、基础应用:C++代码详解

1. 下一个更大元素(LeetCode 496)

问题:为 nums2 中每个元素找右侧第一个更大值,返回 nums1 子集的结果。

#include <vector>
#include <stack>
#include <unordered_map>
using namespace std;vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int> st;  // 单调递减栈(存储索引)unordered_map<int, int> nextGreater; // 存储元素到下个更大值的映射// 遍历 nums2,构建映射关系for (int num : nums2) {// 当前元素比栈顶大 → 栈顶元素的下一个更大值是当前元素while (!st.empty() && num > st.top()) {nextGreater[st.top()
http://www.dtcms.com/a/347270.html

相关文章:

  • Vue环境组件node.js安装
  • C语言---数据类型
  • Qt中使用MySQL数据库
  • git实战(8)git高阶命令分析【结合使用场景】
  • ADC系统中的信噪比(SNR)
  • 容器安全实践(二):实践篇 - 从 `Dockerfile` 到 Pod 的权限深耕
  • 多模态医学图像融合:解锁顶会顶刊中的医学影像新视界
  • 【GaussDB】使用MySQL客户端连接到GaussDB的M-Compatibility数据库
  • 智慧零售漏扫率↓79%!陌讯多模态融合算法在智能收银与货架管理的实战解析
  • 【Linux】深度学习Linux下的包管理器yum/apt
  • Day22: Python涡轮增压计划:用C扩展榨干最后一丝性能!
  • 微前端架构常见框架
  • 深度学习之PyTorch框架(安装,手写数字识别)
  • pid自适应调节实战设计-基于输出电流的PI参数切换方案
  • deepseek应用技巧-MCP服务操作网页和文档
  • ESP32应用——UDP组播/广播(ESP-IDF框架)
  • AI 辅助编程完全新手指南 - 从零基础到高效协作
  • Java试题-选择题(15)
  • flink常见问题之超出文件描述符限制
  • frp v0.64.0 更新:开源内网穿透工具,最简洁教程
  • 生成一个256 点 Q15 正弦表,deepseek载了
  • TK 直播网络串流 通过VLC本地播放
  • 合合信息acge模型获C-MTEB第一,文本向量化迎来新突破
  • 数据库服务语句应用
  • Vmware虚拟机 处理器配置选项配置介绍
  • 香橙派板子Orange Pi 5 Max开启 WiFi 热点
  • Java 线程相关的三个常见接口、类
  • pytorch与torchvision版本对应情况
  • SHAP分析+KOA-RIME开普勒结合霜冰算法双重优化BP神经网络+9种映射方法+新数据预测!机器学习可解释分析!
  • Excel 条件高亮工具,秒高亮显示符合筛选条件的行数据