503.下一个更大元素II

https://leetcode-cn.com/problems/next-greater-element-ii/

技巧一:对于这种需求,常用套路就是将数组长度翻倍

然后在翻倍数组上,按496. 下一个更大元素 I的解法三,套用单调栈模板即可

技巧二:实际上不用真的把数组翻倍,只需取模运算,”假装“该数组长度翻倍

class Solution:
    def nextGreaterElements(self, nums) :
        n = len(nums)
        res = [-1]*n
        stack = []
        # ”假装“该数组长度翻倍,然后用取模映射到原数组
        for i in range(n*2-1, -1, -1):
            while stack and stack[-1] <= nums[i%n]:
                stack.pop()
            res[i%n] = stack[-1] if stack else -1
            stack.append(nums[i%n])
        return res

最后更新于