题目要求
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。
解题思路
方法一
- 因为是循环数组,想到将数组nums复制一份粘贴到nums后面,即nums_ = nums + nums,得到新数组nums_。
- 使用数组实现单调栈,字典保存数据以便后续处理。
- 栈中每次压入索引和值构成的二元组。
- 剩余思路跟下一个更大元素 I 基本一致。
class Solution(object):
def nextGreaterElements(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
nums_ = nums + nums
dic = {
}
stack = []
for i in range(len(nums_)):
if len(stack) == 0:
# 栈中每次压入索引和值构成的二元组
stack.append((i, nums_[i]))
else