题目

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

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

输入: temperatures = [30,60,90]
输出: [1,1,0]

其实就是,找出数组中每一个元素的右边第一个比他大的元素距离自己的下标差。

思路:单调栈

遍历数组,每个元素进入栈,
入栈前,该元素和栈顶元素比较大小,大于栈顶元素,则栈顶元素找到了第一个比他大的元素,计算下标差,弹出栈顶元素
该元素再和新的栈顶元素比较大小,重复上述过程
直到该元素小于栈顶元素,或空栈,将该元素入栈

例如:
开始遍历
73,入栈【73】
74,大于73,计算74与73在原数组中的下标差,弹出73【】,74入栈【74】
75,大于74,计算75与74在原数组中的下标差,弹出74【】,75入栈【75】
71,小于75,入栈【75,71】
69,小于71,入栈【75,71,69】
72,大于69,计算72和69在原数组中的下标差,弹出69【75,71】

  • 大于71,计算72和71在原数组中的下标差,弹出71【75】
  • 小于75,72入栈【75,72】

76,大于72,计算76和72在原数组中的下标差,弹出72【75】

  • 大于75,计算76和75在原数组中的下标差,弹出75【】,76入栈【76】

73,小于76,入栈【76,73】

def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
    stack = []
    n = len(temperatures)
    res = [0]*n

    for i in range(n):
        while stack and temperatures[i] > temperatures[stack[-1]] :
            preIndex = stack.pop()
            res[preIndex]=i-preIndex
        stack.append(i)

    return res

Ethan
140 声望11 粉丝

水平较低,只是记录,谨慎参阅


引用和评论

0 条评论