单调栈(Monotonic Stack)
文章平均质量分 78
CP Coding
这个作者很懒,什么都没留下…
展开
-
LeetCode 1856. Maximum Subarray Min-Product - 亚马逊高频题30
题目对数组的最小积做了定义,即数组中的最小值与数组和的乘积。现在给定一个数组,要求从所有子数组找出具有最大的最小积的那个,返回最大的最小积。暴力解法当然是计算每个子数组的最小积,从中找出最大的那个。所有子数组的问题都可以用暴力解法,但所有的子数组问题也都有更优解。算法实现可参考单调栈(Monotonic Stack)系列题。原创 2022-04-08 11:05:29 · 577 阅读 · 0 评论 -
LeetCode 654. Maximum Binary Tree - 单调栈(Monotonic Stack)系列题10
这道题的解法很直观,就是界定好左右边界,然后找到该范围内的最大值把数组分成左右两部分,以该最大值为根节点,然后递归处理左右两部分子数组,分别为根节点的左右子树。看似跟单调栈没什么关系,但是利用单调栈优化算法可以提高速度。原创 2022-01-31 01:28:45 · 791 阅读 · 0 评论 -
LeetCode 1762. Buildings With an Ocean View - 单调栈(Monotonic Stack)系列题9
熟练掌握了单调栈之后,这题的难度系数就变成了easy,它就是判断每栋高楼的右侧有没有更高的楼,只要有一栋更高的,那该栋楼就被挡住了,其实就是求数组里每个数的下一个更大数(Next Greater Number)原创 2022-01-30 21:29:27 · 1117 阅读 · 0 评论 -
LeetCode 402. Remove K Digits - 单调栈(Monotonic Stack)系列题8
题目给定一个字符串num和一个整数k,字符串num的长度为n用来表示一个n位的整数,其中每个字符的范围为‘0’~‘9’表示整数每一位上的数字。现在要求删掉其中k个字符后,使剩下的字符表示的整数最小。要一串字符表示的整数最小,那就要尽可能地使小的字符在前(即高位)大的字符在后,也就是说尽可能使字符递增排列。因此要是用一个堆栈来依次存放字符那就要尽可能使堆栈保持单调递增。原创 2022-01-29 23:06:38 · 421 阅读 · 0 评论 -
LeetCode 316. Remove Duplicate Letters - 单调栈(Monotonic Stack)系列题7
题目给定一个字符串,要求删掉字符串里重复的字符使得最后字符串里的每个字符都只出现一次。 另外删除字符的过程中要尽可能使最后的字符串按字典序排列最小。我们知道一串字符要是所有字符是按从小到大排列好的那么它就是字典序最小的那个字符串,因此这题就要通过删除字符尽可能地使字符按递增排列。这也就很容易使我们想起用单调递增栈来解答。原创 2022-01-28 22:50:53 · 356 阅读 · 0 评论 -
LeetCode 456. 132 Pattern - 单调栈(Monotonic Stack)系列题6
题目给定一个整型数组,问是否存在三个数的子序列满足132模式,所谓132模式就是三个数保持数组中的顺序,第三个数大于第一个数但小于第二个数。这题是一道变形的单调栈类型题,要是不放在单调栈系列里刷是很难想到可以用单调栈的。原创 2022-01-27 23:48:33 · 466 阅读 · 0 评论 -
LeetCode 1019. Next Greater Node In Linked List - 单调栈(Monotonic Stack)系列题5
这题是给定一个链表,然后要求链表中每个节点值的下一个更大值(Next Great Node),最后返回一个数组,数组中每个数对应的是链表从头到尾每个节点的下个更大节点值(不存在的为0)。最简单的解法就是遍历链表,把链表转换成一个数组,然后就跟496. Next Greater Element的解法一样了。要是这样的话,这题难度系数就应该是easy了,因此得想办法通过一次遍历就把事情给办了。原创 2022-01-26 23:50:44 · 404 阅读 · 0 评论 -
LeetCode 42. Trapping Rain Water - 单调栈(Monotonic Stack)系列题4
题目给定一个非负整数的数组,数组里每个数表示一个宽度为1的柱子的高度,由于柱子之间的高度差就会形成一个个槽位,这样一下雨这些槽位就会装满水。问最多能装多少单位的水?先来分析一下什么情况才能装水,两根紧挨着的柱子肯定无法形成槽位,因此至少是三根以上的柱子;要是柱子高度单调递增或递减也无法形成槽位。只有出现一排柱子边上的两根柱子高于中间的柱子才能形成槽位。根据以上分析,跟单调栈的算法很相似,因此可以用单调栈来解答该题。原创 2022-01-25 23:54:30 · 456 阅读 · 0 评论 -
LeetCode 739. Daily Temperatures - 单调栈(Monotonic Stack)系列题3
这道题其实就是求下一个更大数(Next Greater Number),只是被包装成气温相关的问法。原创 2022-01-24 04:19:54 · 329 阅读 · 0 评论 -
LeetCode 503. Next Greater Element II - 单调栈(Monotonic Stack)系列题2
这题也是要求一个数组中所有数的下一个更大数,但是给定的数组是首尾相连的循环数组,也就是说对于一个元素要是一直到数组最后还找不到下一个更大数,还得继续从数组头开始直到当前元素的前一个元素之间找,查找到前一个元素就可以停止了,再继续往后循环就都是重复的情况。因此这题解法是只要在496. Next Greater Element I的单调栈解法的基础遍历两遍数组就可以了。原创 2022-01-23 20:12:04 · 378 阅读 · 0 评论 -
LeetCode 496. Next Greater Element I - 单调栈(Monotonic Stack)系列题1
所谓单调栈(Monotonic Stack)就是,栈里的元素是按单调递增或递减顺序排列的,它特别适用于解决查找一个序列中的一个元素的下一个更大的或更小的元素的问题。这是一道经典的单调栈的题,因为用暴力解法的话时间复杂度为O(n^2),而单调栈则为O(n)。原创 2022-01-22 23:31:04 · 432 阅读 · 0 评论