LeetCode503:下一个更大元素 II

问题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)]

运行结果:

你可能感兴趣的:(LeetCode503:下一个更大元素 II)