leetcode503. 下一个更大元素 II

相比于502,这题主要掌握一下如何模拟环形数组
环形数组一般来说都是将数组翻倍来模拟的。如:
[5,4,3,2,1][5,4,3,2,1]
在算法上我们可以对数组的下标翻倍后取模(数组长度)来实现

def nextGreaterElements(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        n = len(nums)
        stack = []
        res = [-1]*n 
        for i in range(2*n-1,-1,-1):
            while stack and stack[-1] <= nums[i%n]:
                stack.pop()
            if stack:
                res[i%n] = stack[-1]
            stack.append(nums[i%n])
        return res

你可能感兴趣的:(单调栈,算法,数据结构)