Bootstrap

503.下一个更大元素

class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        # 思路1:开一个数组,把两个数组链接在一起,以空间换时间
        num = nums+nums
        stack = [0]
        res = [-1]*len(num)
        for i in range(1,len(num)):
            if num[i]<num[stack[-1]]:
                stack.append(i)
            else:
                while stack != [] and num[i]>num[stack[-1]]:
                    res[stack[-1]] = num[i]
                    stack.pop()
                stack.append(i)
        return res[:len(num)//2]
        # 思路2:环形数组:使用模
        stack = []
        res = [-1]*len(nums)
        for i in range(len(nums)*2):
            while stack and nums[i%len(nums)] > nums[stack[-1]]:
                res[stack[-1]] = nums[i%len(nums)]
                stack.pop()
            stack.append(i%len(nums))
        return res


        # 思路三:可以重新遍历数组
        res = [-1]*len(nums)
        stack = []
        for i in range(len(nums)):
            while stack and nums[i]>nums[stack[-1]]:
                res[stack[-1]] = nums[i]
                stack.pop()
            stack.append(i)
        for num in nums:
            if stack == []:
                return res
            else:
                while num > nums[stack[-1]]:
                    res[stack[-1]] = num 
                    stack.pop()
        return res

题目链接:503. 下一个更大元素 II - 力扣(LeetCode)

;