leetcode刷题250天(8)——496. 下一个更大元素 I

# 单调栈的经典用法
class Solution(object):
    def nextGreaterElement(self, nums1, nums2):
        import collections
        dic = collections.defaultdict(int)
        queue = []
        for i in range(len(nums2)-1, -1 ,-1):
            
            # 当前元素入栈时, 循环判断 
            # 排空当前栈中比待入栈元素小的数值
            while queue and queue[-1] < nums2[i]:
                queue.pop()
            # 当前栈为空,则当前入栈值向右看没有大于自己的值
            if not queue:
                dic[nums2[i]] = -1
            # 当前栈存在元素,则当前入栈值向右看有大于自己的值
            # 然后将自己作为键, 比自己大的值(当前的栈顶元素)作为值存放于字典中
            else:
                dic[nums2[i]] = queue[-1]
            
            queue.append(nums2[i])

        # 当前元素的看见的最大值在dic字典中存放
        for idx, content in enumerate(nums1):
            # 将nums1的值作为键查找值 覆盖到nums1中
            # 即为nums1中元素在nums2中对应位置 右侧 比自己大的元素
            nums1[idx] = dic[content]
    
        return nums1

你可能感兴趣的:(leetcode,leetcode,算法,python)