503. 下一个更大元素 II
难度中等355
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。
示例 1:
1 | 输入: [1,2,1] |
注意: 输入数组的长度不会超过 10000。
单调栈
使用单调栈维护更大数字的index:
如果栈为空,将当前的index入栈;
如果栈不为空,看栈中的第一个元素是不是小于当前的元素;
- 如果小于当前的元素,那么那个元素的res就是当前的数字,将那个index出栈,继续出栈其余的元素;
- 如果大于当前的元素,那么将当前的index入栈;
因为是循环数组,因此我们需要遍历该数组中每个元素最多 2次才能得到所有元素的结果。
1 |
|
暴力解法
1 | class Solution { |