70-Stack--LC503下一个更大元素II

这篇博客介绍了如何使用单调栈和哈希表解决数组中每个元素的下一个更大元素问题,特别关注了处理循环数组的方法,通过实例代码展示了如何利用下标取模实现。

在这里插入图片描述

class Solution(object):
    def nextGreaterElements(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        # 单调栈+哈希表,跟LC496的区别是,这次是循环数组
        # 比较笨的办法就是在给出的数组后面接上数组的[0,n-1],这样就算人工构造的循环数组了
        # 其实,可以直接用下标取模来实现
        n = len(nums)
        res = [-1] * n
        stack = list()
        for i in range(2*n-1):
            while stack and nums[i%n] > nums[stack[-1]]:
                res[stack.pop()] = nums[i%n]
            stack.append(i%n)
        return res
        # 逆序
        n = len(nums)
        res = [-1]*n
        stack = list()
        for i in range(2*n-1, -1, -1):
            while stack and nums[stack[-1]] <= nums[i%n]:
                stack.pop()
            res[i%n] = nums[stack[-1]] if stack else -1
            stack.append(i%n)
        return res
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值