今日专题:单调栈
739. 每日温度
python
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
#单调栈
size=len(temperatures)
st=[]
res=[0]*size
for i in range(len(temperatures)-1,-1,-1):
while len(st)>0 and temperatures[i]>=temperatures[st[-1]]:
st.pop()
if len(st)>0:
res[i]=st[-1]-i
st.append(i)
return res
496. 下一个更大元素 I
python
class Solution:
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
# 1.在nums2中找到nums1[i]的位置j
# 2. 找到j后面的第一个更大元素
#直接先维护出nums2中每个元素的后一个元素
st=[]
dict={}
size=len(nums2)
for i,n in enumerate(reversed(nums2)):
while len(st)>0 and n>=st[-1]:
st.pop()
if len(st)>0:
dict[n]=st[-1]
else:
dict[n]=-1
st.append(n)
res=[]
for n in nums1:
res.append(dict[n])
return res
503. 下一个更大元素 II
python
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
#拷贝一个数组拼到原数组后面
size=len(nums)
nums=nums+nums[::]
st=[]
res=[-1]*size
for i in range(len(nums)-1,-1,-1):
while len(st)>0 and nums[i]>=st[-1]:
st.pop()
if len(st)>0 and i<size:
res[i]=st[-1]
st.append(nums[i])
return res