Leetcode 739. 每日温度

心路历程:

暴力解很好想到,就是一个On2的双层循环即可,但是会超时。于是第一反应想到了动态规划,这道题的动态规划思路其实本质上有点像那个跳跃游戏,相当于跳着比较从而减少遍历复杂度。

后来从网上发现这道题是经典的单调栈题目,从后向前遍历,当新遇到的值比之前的元素大的时候,就把比它小的全部pop出去。

解法一:单调栈

python 复制代码
class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        # 单调栈
        n = len(temperatures)
        ans = [0] * n
        st = []
        for i in range(n-1, -1, -1):
            while st and temperatures[i] >= temperatures[st[-1]]: st.pop()  # 丢弃掉比当前值小且排在后面的栈中元素
            if st:  # 可能没有比当前元素大的数了
                ans[i] = st[-1] - i
            st.append(i)  # 每个元素都进栈
        return ans  

解法二:动态规划:

python 复制代码
class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        @cache
        def dp(i):  # 第i天的下一个最高温度在几天后
            if i == len(temperatures) - 1: return 0
            if temperatures[i] < temperatures[i+1]:
                return 1
            else:
                k = i + 1
                while k <= len(temperatures) - 1:
                    nextbig = dp(k)
                    if nextbig == 0: break
                    k += nextbig
                    if temperatures[k] > temperatures[i]:
                        return k - i
                return 0
        res = []
        for i in range(len(temperatures)):
            res.append(dp(i))
        return res
相关推荐
一只天蝎的晋升之路5 分钟前
基础算法之:动态规划
算法·动态规划
KangkangLoveNLP16 分钟前
手动实现一个迷你Llama:使用SentencePiece实现自己的tokenizer
人工智能·深度学习·学习·算法·transformer·llama
luckyme_18 分钟前
leetcode-代码随想录-哈希表-哈希理论基础
leetcode·哈希算法·散列表
独好紫罗兰20 分钟前
洛谷题单3-P1420 最长连号-python-流程图重构
开发语言·python·算法
柯ran1 小时前
数据结构|排序算法(一)快速排序
数据结构·算法·排序算法
pipip.1 小时前
搜索二维矩阵
数据结构·算法·矩阵
uhakadotcom1 小时前
图像识别中的三大神经网络:Inception、ResNet和VGG
算法·面试·github
努力学计算机的小白一枚1 小时前
146. LRU 缓存 && 带TTL的LRU缓存实现(拓展)
算法·缓存
uhakadotcom1 小时前
DeepFM算法:提升CTR预估和推荐系统的强大工具
算法·面试·github
evolution_language2 小时前
LintCode第974题-求矩阵各节点的最短路径(以0为标准)
算法·最短路径·广度优先搜索