问题503:给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字x的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1。

本题算法与739题相同。
完整代码:
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
double_nums = copy.deepcopy(nums)
double_nums.extend(nums)
l = [-1 for _ in range(len(double_nums))]
stack = []
for i in range(len(double_nums)):
if not stack or double_nums[i] <= double_nums[stack[-1]]:
stack.append(i)
continue
while stack and double_nums[i] > double_nums[stack[-1]]:
l[stack[-1]] = double_nums[i]
stack.pop()
stack.append(i)
return l[:len(nums)]
运行结果:
