在求下一个更大的元素,一般使用单调栈解
class Solution:
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
res = {i:-1 for i in nums2}
stack = []
for i in range(len(nums2)):
while stack and nums2[i]>stack[-1]:
res[stack.pop()] = nums2[i]
stack.append(nums2[i])
return [res[i] for i in nums1]
对于两个数组n1,n2,其中n1是n2子集,一般使用集合,集合中索引对应n2的数,栈中存放的是元素
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
stack = []
n = len(nums)
res = [-1] * n
for i in range(2*n-1):
while stack and nums[i%n]>nums[stack[-1]]:
res[stack.pop()] = nums[i%n]
stack.append(i%n)
return res
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
n = len(temperatures)
res = [0]*n
stack = []
for i in range(n):
while stack and temperatures[i]>temperatures[stack[-1]]:
index = stack.pop()
res[index] = i - index
stack.append(i)
return res