初谈这个话题,相信许多人会有一种似有所悟,但又不敢确定的感觉。没错,这正是因为其中“单调”一词的存在,所谓单调是什么,学过函数的people都知道单调函数或者函数的单调性,直白一点说单调就是一直增或一直减。例如:1,3,5,9就是一个单调增数列,数列中不存在后一个数比前一个数小的现象。那么同样,在这里谈到的话题也有类似特点。
转载 2023-07-20 07:26:05
135阅读
(文章目录) 前言 本文介绍单调栈和单调队列的使用,并且提供模板。 一、单调栈? 栈地到栈顶是单调增加或者单调减少的。 1.代码模板: //常见模型:找出每个数左边离它最近的比它大/小的数 //stk[0]是不存放元素的,stk[tt]存放栈顶元素 int tt = 0; for (int i = ...
转载 2021-07-25 00:33:00
695阅读
2评论
单调栈可以方便(O(n))地求出一个数,左右第一个比它大/小的数的位置如何求----给一个序列  2,3,6,9,4,7,1我们先求左边第一个比它小的栈为空,a[S.top()]<a[1] 所以 l[1]=0,S.push(1)单调栈里存的是编号接下来a[S.top()]<a[2] 所以l[2]=S.top=1, S.push(1)同理但是到4的时候a[S.top()]&gt
原创 2022-07-05 10:01:52
77阅读
输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2普通做法,时间复杂度O(n^2),可能会TLE#include <
原创 2022-06-15 10:52:57
186阅读
之前我们讲了 队列、栈 优先队列,本文看下单调队列和单调栈。 单调队列 也许这种数据结构的你没听过,但他其实就是一个队列,只不过是用了巧妙的方法使得队列中的元素单调递增或单调递减。(当然,优先队列也可以求最值,只不过 JavaScript 语言没有原生支持,实现起来较麻烦) 单调队列解决什么问题? 给出数字数组 arr,比如他有 5 个元素,这时可能有 2 个操作: 插入新元素 删除已有元素
原创 2023-05-19 14:20:37
131阅读
单调栈板子题https://www.luogu.com.cn/problem/P5788#include <iostream>#include <stack>using
前言:本篇用了我比较长的时间,干货较多,甚至一篇顶三篇,希望各位耐心观看。Part 1:单调栈  单调栈是一种数据结构,一般分为单调递增栈和单调递减栈。单调栈一般用来解决寻找下一个大于或小于m的值。  我们把得到的答案放到K数组里。  一个经典例题:定义函数   在单调栈中,如果栈为空,那么K[i]就为0,如果栈不为空,则判断栈顶是否大于a[i],如果不是,那么弹出栈顶。最后,不管什么情
最近几天接触了单调队列,还接触了单调栈,就总结一下。 其实单调队列,和单调栈都是差不多的数据类型,顾名思义就是在栈和队列上加上单调单调递增或者单调递减。当要入栈或者入队的时候,要和栈头或者队尾进行比较,满足单调的性质则入队入栈,否则将当前元素删去,直到满足单调性质。 那么问题来了,单调队列,和单调栈有什么用了。最普遍的最重要的作用就是起到优化的作用。当然我目前也只知道这个所用。
原创 2022-10-18 14:03:10
90阅读
#include<iostream>using namespace std;const int N=10010;int n;int stk[N],tt;int main(){ cin>>n; for(int i=0;i<n;i++){ int x;
原创 2024-08-22 14:00:37
26阅读
概要:对于维护信息具有单调性的性质或者问题可以转化为具有单调性质的模型的题,我们可以考虑用单调栈或单调队列。技巧及注意:技巧很多,只要能将问题转化为单调性问题,就好解决了。当维护固定长度的单调区间,我们考虑用单调队列
原创 2021-08-11 14:42:31
163阅读
#include<cstdio> #include<string> #include<cstdlib> #include<cmath> #include<iostream> #include<cstring> #include<set> #include<queue> #include<algori
转载 2018-08-11 16:34:00
135阅读
2评论
单调栈是一种特殊的栈,要求栈中的元素是单调递减或者单调递减的。1、适用场景单调栈适合的题目是求解下一个大于 xxx或者下一个小于 xxx这种题目。所有当你有这种需求的时候,就应该想到单调栈。2、介绍比如我们需要依次将数组 [1,3,4,5,2,9,6] 压入单调栈。首先压入 1,此时的栈为:[1]继续压入 3,此时的栈为:[1,3]继续压入 4,此时的栈为:[1,3,4]继续压入 5,此时的栈为:
转载 2023-12-10 18:05:33
39阅读
目录单调栈(Monotone Stack)42. 接雨水84. 柱状图中最大的矩形方法1:暴力法O(n^2)方法2:单调栈O(n)单调栈:不使用Stack,使用Deque方法3:暴力优化(本题最优解)单调栈(Monotone Stack)栈的应用中有一类问题称为单调栈(Monotone Stack)问题,可以巧妙的将某些问题的时间复杂度降到「O(n)级别」。那么什么是单调栈呢?所谓单调栈,就是保持
转载 2023-11-28 13:02:44
65阅读
单调队列是一种用来快速查询一段长度为n的数组的一部分的最大最小值的算法。它原理相对简单,且易于实现,并且时间复杂度是接近O(n)的,可以解决很多问题。下面以洛谷P1886滑动窗口 /【模板】单调队列为例来介绍单调队列的实现方法。先放上题目:题目描述有一个长为n例如:The array is 输入格式输入一共有两行,第一行有两个正整数输出格式输出共两行,第一行为每次窗口滑动的最小值第二行为
转载 2024-05-14 10:50:40
247阅读
单调栈,英文 monotonic stack. 如果你常刷LeetCode的话,百题之内至少见2次单调栈。 本文尝试揭秘单调栈的关键点。单调栈的定义单调栈分为单调递增栈和单调递减栈。单调递增栈: 从栈顶往栈底看,是单调递增的关系(含相等);单调递减栈: 从栈顶往栈底看,是单调递减的关系(含相等);严格来说,含了“相等”的,应该就不能说是“单调”了,但在这里应作宽泛的理解,即这里的“单调”也包括“相
转载 2023-08-21 11:45:06
72阅读
239. Sliding Window Maximum581: https://leetcode.com/problems/shortest-unsorted-continuous-subarray/862: https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/  496:&
转载 2023-08-09 14:50:55
82阅读
单调栈 参考: 单调栈 - Shuyu Fang - CSDN博客http://blog.csdn.net/alongela/article/details/8227707 单调栈的介绍以及一些基本性质 - 多反思,多回顾,要坚持。 - CSDN博客http://blog.csdn.net/liuj
转载 2017-08-28 19:12:00
324阅读
2评论
字面意思上理解,栈内元素是单调的,根据题目要求可能是单调递增或递减的。对于一个长度为 n 的序列,如果要求左边第一个比 x 小的数 暴力做法: 但是我们可以有些数是永远不可能被当成答案输出的 例如,如果 6 的后面有 4 ,那么由于 4 比 6 小,且位于更右边,距离待求数更近,所以 6 不可能... ...
转载 2021-08-04 08:41:00
103阅读
2评论
转载 2021-08-04 17:50:00
97阅读
2评论
单调栈先说一下单调栈的构成,其实就是 用数组模拟单调栈首先我们需要 一个头指针 一个原数组 一个构造的栈数组;就这么简单明了问题
原创 2022-07-15 10:22:27
70阅读
  • 1
  • 2
  • 3
  • 4
  • 5