代码随想训练营第58天(Python)| 739. 每日温度、496.下一个更大元素 I
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
n = len(temperatures)
ans = [0] * n
# 单调增的栈
stack = []
for i in range(n):
# 如果遍历的 temperatures[i] 比栈顶元素小,则先入栈
while len(stack) > 0 and temperatures[i] > temperatures[stack[-1]]:
ans[stack[-1]] = i - stack[-1]
stack.pop()
stack.append(i)
return ans
496.下一个更大元素 I
方法一:
通过单调栈列出 nums2 每个元素更大元素的值
class Solution:
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
n = len(nums2)
ans2 = [0] * n
stack = []
for i in range(len(nums2)):
while len(stack) > 0 and nums2[i] > nums2[stack[-1]]:
ans2[stack[-1]] = i
stack.pop()
stack.append(i)
ans1 = [-1] * len(nums1)
for i, num in enumerate(nums1):
ans2_index = nums2.index(num)
if ans2[ans2_index] == 0:
ans1[i] = -1
else:
ans1[i] = nums2[ans2[ans2_index]]
return ans1
简洁版
class Solution:
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
res = {}
stack = []
for i in range(len(nums2)):
while len(stack) > 0 and nums2[i] > stack[-1]:
res[stack[-1]] = nums2[i]
stack.pop()
stack.append(nums2[i])
return [res.get(num, -1) for num in nums1]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?