单调栈-下一个更大元素

单调栈使用满足如下:

输入:nums1=[4,1,2],nums2=[1,3,4,2].

输出:[-1,3,-1]

解释:

对于num1中的数字4 ,你无法在第二个数组中找到下一个更大的数字,因此输出-1。

对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3 。

对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出-1 。

实现:

# next biggest element
stack = []
nums1=[4,1,6,2]
nums2=[1,3,6,9,5,4,2]
dic = {}
for i in nums2:
    while stack and stack[-1] < i:
        # 栈不为空,栈顶元素小于当前数值,此值就是栈顶元素的下一个最大值
        dic[stack[-1]] = i
        stack.pop()
    stack.append(i)
result = [dic.get(e,-1) for e in nums1]
print(dic)
result

 

posted @ 2022-09-08 20:08  今夜无风  阅读(20)  评论(0编辑  收藏  举报