
单调栈
Betternw
这个作者很懒,什么都没留下…
展开
-
【单调栈】85 最大矩形
题目给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例 1:输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出:6解释:最大矩形如上图所示。示例 2:输入:matrix = []输出:0分析求最大矩形的面积,类似于求84的最大柱状矩形。但是矩形的底不确定因原创 2021-06-25 16:28:27 · 82 阅读 · 0 评论 -
【单调栈】 402移掉k位数字
题目描述给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = “1432219”, k = 3输出: “1219”解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。思路分析从左往右找更小的,因此当前元素小于栈顶,当前元素入栈。并且k–,当栈中元素的数量为k个时返回结果。注意首位为0的情况代码public Stri原创 2021-05-28 21:56:40 · 74 阅读 · 0 评论 -
【单调栈 321. 拼接最大数】
题目描述给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。说明: 请尽可能地优化你算法的时间和空间复杂度。示例 1:输入:nums1 = [3, 4, 6, 5]nums2 = [9, 1, 2, 5, 8, 3]k = 5输出:思路分析题原创 2021-05-28 18:30:09 · 128 阅读 · 0 评论 -
【单调栈】 316. 去除重复字母
题目描述给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例 1:输入:s = “bcabc”输出:“abc”示例 2:输入:s = “cbacdcbc”输出:“acdb”思路分析入栈条件:当前元素字典序大于栈顶,且栈中没有出现过该元素维护一个计数数组和判断栈中是否出现过该元素的数组for循环遍历,当栈中没有出现过该元素的时候,当前元素小于栈顶元素字典序并且栈顶元素后面还有的时候,栈顶出栈。原创 2021-05-28 18:20:28 · 105 阅读 · 0 评论 -
【单调栈 循环数组 503. 下一个更大元素 II】
题目描述给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。思路分析循环数组的实现:一种实现方式是,把数组复制原创 2021-05-28 17:42:20 · 228 阅读 · 0 评论 -
【单调栈 增 496. 下一个更大元素 I】
题目描述给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释:对于 num1 中的数字 4 ,你无法在第二个数组中找到原创 2021-05-28 17:22:09 · 88 阅读 · 0 评论 -
【单调栈】 739 每日温度
题目请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。总结动画Deque、Stack区别...原创 2020-06-26 13:26:46 · 179 阅读 · 0 评论 -
【单调栈 找小的 单调递增栈 】 84 柱状图中最大的矩形
题目给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。输入: [2,1,5,6,2,3]输出: 10思路单调递减栈:能找到左右比第一个比当前大的元素单调递增栈:能找到左右第一个比当前小的元素本题就是找到当前左右第一个比自己小的元素,下标差乘高度就是矩阵面积。建立一个新的数组,增加头尾两个元素,防止找不到第一个和最后一个元素的左右最小元素,导致无法计算下标差。代码public int largestRect原创 2020-06-26 14:43:46 · 185 阅读 · 0 评论 -
【单调栈 单调递减栈 宽度是当前减弹出后的新栈顶(左右比自己高的相减) 高度是两个进行比较 】 42接雨水
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6思路单调递减栈:当找到一根比前面高的柱子,就可以接雨水,当后面的比前面的低就不可以接。因此相当于寻找右边第一个更大的,那么就是单调递减栈。雨水的区域:右边的目前遍历到的数字,底部是栈顶,左边是栈顶的前一个。计算:水坑高度——左右两边更低的元素减去底部。宽度:左右下标差。如果出栈后栈为空,则不计算面积。将当前入栈,进行下一次原创 2020-06-26 15:30:29 · 154 阅读 · 0 评论