class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
# 思路1:开一个数组,把两个数组链接在一起,以空间换时间
num = nums+nums
stack = [0]
res = [-1]*len(num)
for i in range(1,len(num)):
if num[i]<num[stack[-1]]:
stack.append(i)
else:
while stack != [] and num[i]>num[stack[-1]]:
res[stack[-1]] = num[i]
stack.pop()
stack.append(i)
return res[:len(num)//2]
# 思路2:环形数组:使用模
stack = []
res = [-1]*len(nums)
for i in range(len(nums)*2):
while stack and nums[i%len(nums)] > nums[stack[-1]]:
res[stack[-1]] = nums[i%len(nums)]
stack.pop()
stack.append(i%len(nums))
return res
# 思路三:可以重新遍历数组
res = [-1]*len(nums)
stack = []
for i in range(len(nums)):
while stack and nums[i]>nums[stack[-1]]:
res[stack[-1]] = nums[i]
stack.pop()
stack.append(i)
for num in nums:
if stack == []:
return res
else:
while num > nums[stack[-1]]:
res[stack[-1]] = num
stack.pop()
return res
题目链接:503. 下一个更大元素 II - 力扣(LeetCode)