单调栈
文章平均质量分 53
DarkFlameMaster2188
这个作者很懒,什么都没留下…
展开
-
84. 柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。这里就涉及到了单调栈很重要的性质,就是单调栈里的顺序,是从小到大还是从大到小。数组的末尾和头部加0是为了防止数组为单调递增数组或单调递减数组,导致结果为0。所以需要循环查找,也就是下面在寻找的过程中使用了while。本题和接雨水比较相似,都可采用双指针法和单调栈法解决。求在该柱状图中,能够勾勒出来的矩形的最大面积。,而不是左边第一个小于该柱子的高度。本题要记录记录每个柱子。原创 2024-07-04 15:22:50 · 300 阅读 · 0 评论 -
42. 接雨水
我们把每一个位置的左边最高高度记录在一个数组上(maxLeft),右边最高高度记录在一个数组上(maxRight),这样就避免了重复计算。当前位置,左边的最高高度是前一个位置的左边最高高度和本高度的最大值。因为一旦发现添加的柱子高度大于栈头元素了,此时就出现凹槽了,栈头元素就是凹槽底部的柱子,栈头第二个元素就是凹槽左边的柱子,而添加的元素就是凹槽右边的柱子。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。使用单调栈,也是通过 长 * 宽 来计算雨水面积的。原创 2024-07-04 10:37:22 · 124 阅读 · 0 评论 -
496. 下一个更大元素 I
如果不存在下一个更大元素,那么本次查询的答案是 -1。那么,首先是res数组的定义以及初始化,由于存放的是nums1中的结果,所以res数组大小为nums1.size(),题目说如果不存在对应位置就输出 -1 ,所以result数组如果某位置没有被赋值,那么就应该是是-1,所以就初始化为-1。本题和每日温度的区别是,需要从nums1中提取元素,然后在nums2中寻找下一个更大元素,因此,我们在nums2中寻找到下一个最大元素时,需要找到当前栈顶元素在nums1中的对应位置,以此来更新存放结果的数组。原创 2024-07-03 16:51:52 · 301 阅读 · 0 评论 -
739. 每日温度
因为我们遍历数组的时候,我们不知道之前都遍历了哪些元素,以至于遍历一个元素找不到是不是之前遍历过一个更小的,所以我们需要用一个容器(这里用单调栈)来记录我们遍历过的元素。这里我们要使用递增循序(再强调一下是指从栈头到栈底的顺序),因为只有递增的时候,栈里要加入一个元素i的时候,才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i。那么单调栈的原理是什么呢?,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。本题开始使用单调栈的思想,怎么能想到用单调栈呢?原创 2024-07-03 15:15:15 · 279 阅读 · 0 评论