给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。
请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。
#利用单调栈的性质
stack = []
res = {}
for num in reversed(nums2):
while stack and num > stack[-1]:
#比爷小的,没资格留下来
stack.pop()
#都比我小,独孤求败,-1以示尊重(额,res[最后一位]铁定为-1,来得早不如来得巧)
#取栈顶元素
res[num] = stack[-1] if stack else -1
stack.append(num)
return [res[num] for num in nums1]