[LeetCode]503. Next Greater Element II

Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, output -1 for this number.

Example 1:

Input: [1,2,1]
Output: [2,-1,2]
Explanation: The first 1's next greater number is 2; 
The number 2 can't find next greater number; 
The second 1's next greater number needs to search circularly, which is also 2.

**Note: **The length of given array won't exceed 10000.

难度

Medium

方法

借助stack,遍历nums,如果stack为空或者nums[stack[-1]] >= nums[i],将i压入stack,表示nums[i]还未找到它的下一个greater element。当nums[stack[-1]]

python代码
class Solution(object):
    def nextGreaterElements(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        result = [-1] * len(nums)
        stack = []
        for i in range(len(nums))*2:
            while stack and (nums[stack[-1]] < nums[i]):
                result[stack.pop()] = nums[i]
            stack.append(i)

        return result

assert Solution().nextGreaterElements([1,2,1]) == [2,-1,2]

你可能感兴趣的:([LeetCode]503. Next Greater Element II)