503. 下一个更大的元素II

发布时间 2023-10-09 10:50:35作者: BJFU-VTH

链接

https://leetcode.cn/problems/next-greater-element-ii/description/

思路

我在单调栈这块是真的不会......稍微一变就想不明白了, 得找个时间攻克一下

这个题目,我能想到的办法就是把数组拉长到2倍(模拟循环数组),然后对其进行单调栈处理

首先,我们要求的是下一个更大的元素,所以单调栈应该是递减的。

之所以这个题目可以从前往后遍历, 是因为这是个循环数组(我猜测是这样的,我真的想不懂...)

代码

class Solution:
    def nextGreaterElements(self, nums):
        if not nums:
            return []
        # 拉长, 一个最朴素的道理, 如果不能确定, 就比较2圈, 因为循环数组就是除了自己和其他人都要比
        res = [-1 for i in nums+nums[:-1]]
        single_stack = []
        # 拉长, 一个最朴素的道理, 如果不能确定, 就比较2圈, 因为循环数组就是除了自己和其他人都要比
        new_nums = nums + nums[:-1]
        for i, v in enumerate(new_nums):
            while single_stack and new_nums[single_stack[-1]] < new_nums[i]:
                top_val_index = single_stack.pop()
                res[top_val_index] = new_nums[i]
            single_stack.append(i)
        return res[:len(nums)]