代码随想训练营第58天(Python)| 739. 每日温度、496.下一个更大元素 I

739. 每日温度

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]
posted @   忆象峰飞  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示