# 单调栈的经典用法
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