给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。
示例 1:
输入: [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数;
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
注意: 输入数组的长度不会超过 10000。
分析:
- 如果你还没解决next Greater Element I,那么建议你先看一下I的解法,具体思路见Leetcode-496-Next-Greater-Element-I,看完之后本题解法呼之欲出
- 我们只需要对给定的nums数组*2即可,如示例1中nums,我们将其改成[1,2,1, 1,2,1],用I中思想解即可
- 对于数组中最大的数,全设为-1即可
思路:
- 初始化res数组,全为-1,len(res) = len(nums)
- 利用栈存储数据和其下标,因为我们将nums长度翻倍了,故需判断一下下标是否小于len(res)
1 | class Solution(object): |