单调栈:栈里的元素是递增或者是递减的
适用于寻找当前元素的右边或左边第一个大的或者第一个小的元素,计算那个元素和当前元素的距离
如果是寻找大的元素,就构造递增的单调栈(从栈头到栈底)保证栈头是最小的
每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,
其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
class Solution(object):
def dailyTemperatures(self, temperatures):
"""
:type temperatures: List[int]
:rtype: List[int]
"""
# 用于存放最终的结果
answer =[]
stack=[] # 单调栈,里面存的是数组的下标
stack[0]=[0]
for i in range(1,len(temperatures)):
if temperatures[i] <= temperatures[stack[-1]]:
stack.append(i)
else:
while len(stack) != 0:
answer[stack[-1]]=i-stack[-1]
stack.pop()
stack.append(i)
return answer
下一个最大元素
def nextGreaterElement(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
stack=[]
stack.append(0)
result=[-1]*len(nums1)
final_result=[]
for i in range(1,len(nums2)):
if nums2[i]>nums2[stack[-1]]:
while len(stack) != 0 and nums2[i] > nums2[stack[-1]]:
# 先判断一下nums2中要求的是否在nums1中出现过
# 出现过,就找到nums1中对应的位置,然后让result[index]=nums2[i]
if nums2[stack[-1]] in nums1:
index = nums1.index(nums2[stack[-1]])
result[index] = nums2[i]
stack.pop()
stack.append(i)
else:
stack.append(i)
return result