leetcode——下一个最大元素(单调栈)

本文介绍了如何使用单调栈解决LeetCode中的'下一个最大元素'系列问题。通过实例解析了单调栈的工作原理,并详细解释了在不同题目中的应用策略,包括如何处理重复元素和确保顺序正确。

相关题目

下一个最大元素1
下一个最大元素2
下一个最大元素3
其中前两个题目是关于单调栈的,第三个题目因为是在一起,就一起拿出来了

单调栈

指栈内元素单调排序,比如[5,3,2,1],这里以单调递减为例。
当我们碰到一个大于栈顶元素的值,需要不断弹出栈顶元素,直到栈空或者是栈顶元素大于等于当前元素。

下一个最大元素1

让你在一个超集里面找下一个最大元素,然后匹配到另一个集合,一看就是字典了。
那么怎么找下一个最大元素呢?
我们想这样一个问题,那就是排队,你站在人群中,是这样的:
在这里插入图片描述
无非就是找你能看到的前面一人的老阔(脑壳),那怎么用上单调栈呢?
遍历一遍数组,我们将先将第一个人压栈,然后看第二个人,数值比第一个大(也就是比第一个人高),那么我们就可以肯定,栈顶元素右边一定有比他高的人,我们将栈顶弹出,作为字典的key,也很明显此时的value就是当前元素(第二个人的身高)。

此时栈内只有第二个人,然后我们按第三个人,数值小于栈顶,将第三个人压入栈中,同时也说明,这两个人都是还没找到合适的‘老阔’;
到了第四个人,我们看到他比栈内的都大,所以将两个都弹出(当然是要按照顺序的!),然后字典中赋值key、value,将第四个人压栈。
第五个人,要比栈顶小,压入,结束循环。
此时栈内有第四个和第五个人,他们也就是右边没有高的人了,我们可以挨个弹出value=-1,也可以在子集中用成员运算符’in’
我选第二种:

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        stack = []
        dic = {
   
   }
        for i in nums2:
            while stack and stack[-1]<i:
                dic
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值