739. 每日温度
创建并存储下标的递增单调栈(从栈口到栈底递增),每次遍历都可以利用循环(比自己小就弹出)找到比自己大的元素(或没有),再将自己下标添加进单调栈
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
n = len(temperatures)
tmp = [n - 1]
ans = [0]
for i in range(n - 2, -1, -1):
while tmp and temperatures[i] >= temperatures[tmp[-1]]:
tmp.pop()
if not tmp:
ans.append(0)
else:
ans.append(tmp[-1] - i)
tmp.append(i)
return ans[::-1]
496.下一个更大元素 I
但从单调栈来看,难度不应该是简单
单调栈的运用与上题相同,但是这道题多了个处理结果位置的步骤(利用字典),方式如下
ans = [-1]
n, m = len(nums1), len(nums2)
tmp = [m - 1]
dic = dict()
for i, x in enumerate(nums1):
dic[x] = i
然后就跟上题一样处理,并将结果放入nums1即可
for i in range(m - 2, -1, -1):
while tmp and nums2[i] >= nums2[tmp[-1]]:
tmp.pop()
if tmp:
ans.append(nums2[tmp[-1]])
else:
ans.append(-1)
tmp.append(i)
ans = ans[::-1]
for i, x in enumerate(nums2):
if x in dic:
nums1[dic[x]] = ans[i]
return nums1