739. 每日温度
题目描述: 739. 每日温度.
解法
单调栈
class Solution(object):
def dailyTemperatures(self, temperatures):
res = [0] * len(temperatures)
st = [0]
for i in range(1,len(temperatures)):
while st and temperatures[st[-1]] < temperatures[i]:
res[st[-1]] = i-st[-1]
st.pop()
st.append(i)
return res
单调栈其实就是一个有序的存放已经遍历过的内容的栈,那如果求比遍历过的内容大的位置,那就栈顶大,栈尾小,用当前元素和栈尾元素比较即可。
496.下一个更大元素 I
题目描述: 496.下一个更大元素 I.
解法
单调栈
class Solution(object):
def nextGreaterElement(self, nums1, nums2):
if not nums1:
return []
hashmap = {}
for i in range(len(nums1)):
hashmap[nums1[i]] = i
res = [-1] * len(nums1)
st = [0]
for i in range(1,len(nums2)):
while st and nums2[st[-1]] < nums2[i]:
# 2对应的位置是st[-1],数字是nums2[st[-1]],在nums1中的位置是hashmap[nums2[st[-1]]]
if nums2[st[-1]] in hashmap:
res[hashmap[nums2[st[-1]]]] = nums2[i]
st.pop()
st.append(i)
return res
思路基本相同,月底那个要注意返回的是什么。