503.下一个更大元素II
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。
思路:还是单调栈的应用。只要循环两个数组长度即可。
42. 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
思路:
双指针优化:当前列雨水面积:min(左边柱子的最高高度,记录右边柱子的最高高度) - 当前柱子高度。
单调栈:接雨水这题本质上是寻找左右第一个高于自己的柱子。用一个从栈低到栈顶递减的单调栈即可。
那雨水面积就是 water += (i - stack[-1] - 1) * (min(right, left) - mid)。这里要注意,头尾两侧没有柱子围着。如果stack pop到空,也就意味着此时没有左柱子围着了。那就要break。
以下是卡哥资料
503.下一个更大元素II
这道题和 739. 每日温度 几乎如出一辙,可以自己尝试做一做
42. 接雨水
接雨水这道题目是 面试中特别高频的一道题,也是单调栈 应用的题目,大家好好做做。
建议是掌握 双指针 和单调栈,因为在面试中 写出单调栈可能 有点难度,但双指针思路更直接一些。
在时间紧张的情况有,能写出双指针法也是不错的,然后可以和面试官在慢慢讨论如何优化。
https://programmercarl.com/0042.%E6%8E%A5%E9%9B%A8%E6%B0%B4.html