leetcode hot100 每日温度

739. 每日温度

已解答

中等

相关标签

相关企业

提示

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

单调栈类型的题目:找到一个数组里面左边比他大的数,左边比他小的数,右边比他大的数,右边比他小的数,这种类型的,都是用同一个模板。

首先暴力求解,接着看看有神峨眉优化的地方,这里就是可以维护一个单调栈。

单调栈的模板类似下面,先for循环列表,然后while pop,然后看stack在不在然后append元素

class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        # 典型的单调栈类型的题目,也就是得到右边的比他大的第一个元素
        stack = []
        temperatures = temperatures[::-1]
        ans=[]
        for i in range(len(temperatures)):
            while stack and stack[-1][0]<=temperatures[i]:
                stack.pop()
            if stack:
                ans.append(i-stack[-1][1])
            else:
                ans.append(0)
            stack.append((temperatures[i],i))
        return ans[::-1]

模板就是

        stack = []
        ans=[]
        for i in range(len(temperatures)):
            while stack and stack[-1]<=temperatures[i]:
                stack.pop()
            if stack:
                ans.append(stack[-1])
            else:
                ans.append(-1)
            stack.append(temperatures[i])
  

你可能感兴趣的:(leetcode,算法,职场和发展)