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

单调栈所有模版型题目(1)

普通单调栈模型

首先介绍单调栈模版

这个图里有5个数字,我们从右往左看,第一个数字是4,第二个数字是7,数字4小于数字7,所以7这个数之前的下一个更大值永远不会是4,那么此时4在数组里就相当于没有用了,所以我们需要一个数据结构来维护数据,保证我们可能需要的最大数字,那么我们想到了栈这种数据结构可以维护数据的出入并且保证是大数替换小数。

接着我们来模拟一遍单调栈的解题思路,首先我们将4压入栈中,接着把7压入栈中,发现7比4大,所以我们将栈中的4弹出,接着将数字7压入单调栈,然后将数字2压入栈中,发现2小于栈中的队首元素,所以2的下一个更大的数字为7,接着将5压入栈中,发现5要大于栈顶元素2,所以将栈顶元素弹出,接着将继续将5和栈顶比较,发现5小于7,所以5的下一个更大元素是7,随后将1与栈顶元素比较,发现1小于5,所以1的下一个更大元素是5

接下来给出模版:

#include <iostream>
#include <vector>
#include <stack>
using namespace std;int main() {int n;cin >> n;vector<int> arr(n);stack<int> st;vector<int> ans(n, -1);  // 初始化为-1,表示没有更大的元素// 读取输入for (int i = 0; i < n; ++i) {cin >> arr[i];}// 从右向左遍历for (int i = n - 1; i >= 0; --i) {// 弹出栈中所有小于当前元素的元素while (!st.empty() && arr[i] >= arr[st.top()]) {st.pop();}// 如果栈不为空,栈顶就是下一个更大元素的位置if (!st.empty()) {ans[i] = st.top();}// 将当前索引入栈st.push(i);}// 输出结果(这里输出的是索引,也可以改成输出值)for (int i = 0; i < n; i++) {cout << ans[i] << " ";}return 0;
}

        典型例题是力扣的739. 每日温度 - 力扣(LeetCode)

按照上述模版给出答案

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n=temperatures.size();vector<int> ans(n);stack<int> st;for(int i=n-1;i>=0;i--){int t =temperatures[i];while(!st.empty()&&t>=temperatures[st.top()]){st.pop();}if(!st.empty()){ans[i]=st.top()-i;}st.push(i);}return ans;}
};

本文参考了力扣的灵山爱抚茶的题单分享|【算法题单】单调栈(矩形面积/贡献法/最小字典序)- 讨论 - 力扣(LeetCode)

http://www.xdnf.cn/news/4877.html

相关文章:

  • Maven 处理依赖冲突
  • 【IDEA_Maven】(进阶版)永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径
  • 学习心得《How Global AI Policy and Regulations Will Impact Your Enterprise》Gartner
  • 七、Hadoop 历史追踪、数据安全阀与 MapReduce初体验
  • WORD压缩两个免费方法
  • Java 集合体系深度解析面试篇
  • Java如何获取电脑分辨率?
  • 虚拟文件系统
  • 正大视角下的结构交易节奏:如何借助数据捕捉关键转折
  • java-反射精讲
  • 1236. 递增三元组
  • STL?vector!!!
  • spring ai alibaba 使用 SystemPromptTemplate 很方便的集成 系统提示词
  • U9C-SQL-采购订单视图
  • RGB矩阵照明系统详解及WS2812配置指南
  • 机器学习-无量纲化与特征降维(一)
  • flask开启https服务支持
  • 基于WSL用MSVC编译ffmpeg7.1
  • O2OA(翱途)服务器故障排查
  • 【AI提示词】蝴蝶效应专家
  • 【wpf】12 在WPF中实现HTTP通信:封装HttpClient的最佳实践
  • 【递归,搜索与回溯算法篇】专题(一) - 递归
  • 初学python的我开始Leetcode题8-4
  • vue教程(vuepress版)
  • 深入理解二叉树(2)
  • Music AI Sandbox:打开你的创作新世界
  • 简单说明.nii.gz文件数据结构
  • QVariant 的核心用途
  • Springboot整合kafka简单使用
  • 功率级OBC自动化测试方案