给定一个序列,找出每个元素左边/右边离的最近的数在什么地方,或者找出每个元素左边第一个比它大的数在什么地方...
如:
每个元素最多进栈一次,且最多出栈一次,只有2N个操作,所以时间复杂度为O(N)
https://leetcode-cn.com/problems/next-greater-element-i/
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
n = len(nums2)
m = len(nums1)
stack = []
next_large = {}
for i in range(n-1, -1, -1):
while len(stack) > 0 and stack[-1] <= nums2[i]:
stack.pop()
if len(stack) > 0:
next_large[nums2[i]] = stack[-1]
else:
next_large[nums2[i]] = -1
stack.append(nums2[i])
return [next_large[num] for num in nums1]