496.下一个更大元素

在这里插入图片描述
1.分析题目:
a.对应位置右侧的第一个比x大的元素----->单调栈
b.两个没有重复元素的数组 nums1 和 nums2—>无重复,可以通过建立map代替双重循环解决问题
这里这个map思维之前并未建立,
可以通过单重循环,在循环过程中判断map中是否含有另一个数组的元素,解决问题。
情况一:当前遍历的元素T[i]小于或等于栈顶元素T[st.top()]的情况

情况二:当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况
此时如果入栈就不满足递增栈了,这也是找到右边第一个比自己大的元素的时候。

判断栈顶元素是否在nums1里出现过,(注意栈里的元素是nums2的元素),如果出现过,开始记录结果。

2.和上一个温度不同点:
a.两个数组更加麻烦一些,需要建立map
b.需要判断是否在另一个数组中—>进而判断是否需要记录结果

代码展示

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        map={}
        result=[-1]*len(nums1)
        stack=[]
        for i in range(len(nums1)):
            if nums1[i] in nums2:
                map[nums1[i]]=i
        for i in range(len(nums2)):
            if len(stack)==0 or nums2[i]<=nums2[stack[-1]]:
                stack.append(i)
            while len(stack)!=0 and nums2[i]>nums2[stack[-1]]:
                if nums2[stack[-1]] in map:
                    result[map[nums2[stack[-1]]]]= nums2[i]
                stack.pop()
            stack.append(i)
        return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值