美文网首页
[LeetCode]503. Next Greater Elem

[LeetCode]503. Next Greater Elem

作者: Eazow | 来源:发表于2017-05-27 16:29 被阅读380次

    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]]<nums[i]时,表示nums[i]即为nums[stack[-1]]的下一个较大元素,因此从stack中取出该索引index,将nums[i]存入result[index]中。由于nums是循环的,因此需要将nums复制一遍。result初始值为[-1...],未找到较大元素的则保持-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 Elem

          本文链接:https://www.haomeiwen.com/subject/rmyqfxtx.html