一、单调栈的概念
单调栈是指,栈里面的元素从栈顶到栈底的排列顺序都是单调的(要么递减,要么递增)
二、原题展示
利用单调栈的解法代码(看官方解法二仿写):
利用单调栈的解法代码(官方解法二仿写):
这里代码的单调栈sta起到的作用是——存放nums的下标.
然后比较栈顶下标对应的元素与正常遍历nums[i%len]的大小,
- 如果nums[i%len]较小,那么将其下标继续放入栈,使栈下标对应的元素是递减排列。
- 如果栈顶下标对应的元素较小,那么就找到了题目要的元素nums[i%len],便放入ret()中,然后继续pop(),栈的下一个元素与这个比较。直到不满足while的条件
值得注意的是,nums[i%len],这个对下标取余的想法,我觉得很巧妙
其余的没什么好说的,理解之后其实很简单,我之前是用两遍循环暴力求解,没什么水平
看看这个时间差别,单调栈是个好东西。
如果有想交流,欢迎在评论里与我交流。
这是这个题目的连接:
https://leetcode-cn.com/problems/next-greater-element-ii/solution/xia-yi-ge-geng-da-yuan-su-ii-by-leetcode-bwam/