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
相关推荐
金融小师妹1 小时前
应用BERT-GCN跨模态情绪分析:贸易缓和与金价波动的AI归因
大数据·人工智能·算法
广州智造1 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
Trent19853 小时前
影楼精修-肤色统一算法解析
图像处理·人工智能·算法·计算机视觉
feifeigo1233 小时前
高光谱遥感图像处理之数据分类的fcm算法
图像处理·算法·分类
北上ing4 小时前
算法练习:19.JZ29 顺时针打印矩阵
算法·leetcode·矩阵
.格子衫.5 小时前
真题卷001——算法备赛
算法
XiaoyaoCarter5 小时前
每日一道leetcode
c++·算法·leetcode·职场和发展·二分查找·深度优先·前缀树
Hygge-star5 小时前
【数据结构】二分查找5.12
java·数据结构·程序人生·算法·学习方法
June`7 小时前
专题二:二叉树的深度搜索(二叉树剪枝)
c++·算法·深度优先·剪枝
好吃的肘子8 小时前
Elasticsearch架构原理
开发语言·算法·elasticsearch·架构·jenkins