力扣456
单调栈题目,用的很巧妙,不是普通的无脑单调栈,还涉及到单调栈的一个规律:循环出栈时,出栈的序列也满足反向单调栈的特点。比如下图递减栈在4入栈时:
根据这一现象,可以找到:比入栈值的大/小的最大最小值
本题思路:数组中想找132,机会最大的当然是1越小越好,2越接近3越好,2越大越好(也可以说成3越大越好,因为“2越接近3越好”)
我们从后往前遍历,先找比2大的3,因此构造单调递减栈,栈存的是每一个“3”,随着栈的慢慢迭代,栈顶3会越来越高,满足了“3越大越好”的题意。根据前面提到的性质,出栈的序列是递增栈,当遇到一个峰顶“3”时,最后一个出栈的就是比“3”小的最大的2,存起来,继续遍历的过程中,对比当前值(1)和存起来的(2),就知道是否满足132模式了
1 | //从右往左构造单调递减栈 |
总之,很巧妙我觉得
其他单调栈系列题可以点这里