这道题的思路:
由循环数组的定义,我们必定可以将该数组扩充成2倍,即nums=nums*2。
然后使用栈来存储没有找到下一个更大元素的元素:
对每个元素,如果大于当前栈顶元素,则栈顶元素找到了下一个更大元素。
然后我们将当前元素入栈。
最后我们只需要输出前n个元素即可。
代码并不复杂,相比文字更容易理解。
class Solution(object):
def nextGreaterElements(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n=len(nums)#原始循环数组的长度
nums=nums*2
result=[-1 for i in range(0,2*n)]
stack=[]
for i,num in enumerate(nums):
while stack and stack[-1][1]<num:
pop_item=stack.pop()
result[pop_item[0]]=num
stack.append((i,num))
return result[0:n]