![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
单调栈
leetcode单调栈
why_1513
求实求真,大气大气
展开
-
柱状图中最大的矩形-力扣
因此,思路就是找到每个元素左边第一个比它矮的矩形和右边第一个比它矮的矩形,在这中间的就是最大宽度。单调栈的经典应用场景是,在一维数组中,对每一个数字,找到前/后面第一个比自己大/小的元素。对数组中的每个元素,若假定以它为高,能够展开的宽度越宽,那么以它为高的矩形面积就越大。最后对每个元素遍历一遍找到最大值即可。原创 2024-07-03 11:11:58 · 144 阅读 · 0 评论 -
接雨水★-力扣
假设上一轮移动的是 left 指针,有 height[0, left- 1] < height[right],又 height[left] < height[right],则 height[0, left] < height[right] = rightMax。利用双指针进行求解,统计的是每一列所能接的雨水,在每个 i 出都遍历 i 的左右最高点,是进行了许多重复的操作的,可以使用动规的思想,记录已经遍历过的点的左右最高点。这样就能减少遍历的重复操作。而单调栈的解法,则是横向的来计算。原创 2024-07-02 22:12:38 · 1469 阅读 · 0 评论 -
下一个更大元素Ⅱ-力扣
那么只要将遍历的循环数组 模拟为 一个完整的数组 长度为 nums.size(), 再加上 一个完整的数组 前 nums.size() - 1个元素,这样我们就可以将这个新序列当作普通序列,对每个元素求下一个更大元素。的区别在于数组是循环数组,继而可以在遍历到最后一个数组元素后,循环去重新遍历。在遍历时,对 i 取余即可完成循环遍历。原创 2024-07-02 19:17:55 · 216 阅读 · 0 评论 -
下一个更大元素Ⅰ-力扣
所以我们可以使用一个哈希表来记录 nums1 中元素出现的下标,然后对 nums2 使用单调栈来求每个元素的下一个更大元素,并在哈希表查找nums1中是否存在这个元素,如果存在,则更新ans。由于 nums1和nums2中所有整数 互不相同;nums1 中的所有整数同样出现在 nums2 中;原创 2024-07-02 17:04:33 · 164 阅读 · 0 评论 -
每日温度-力扣
单调栈的本质:是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。最初想到的解法是使用两层for循环进行遍历,找到每天的解,在提交时,但这个解法没有利用到题目给到的一些条件。单调栈的使用场景:通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置。以上两种方法都是使用双层for循环的暴力解法,在。原创 2024-07-02 16:22:48 · 224 阅读 · 0 评论