每日温度 - 栈

14 阅读1分钟

Problem: 739. 每日温度

思路

你选用何种方法解题? 栈 使用单调递减栈来存储还没有找到更高温度的天的索引。当遇到更高的温度时,就可以确定栈中某些天的答案。

解题过程

这些方法具体怎么运用

[73,74,75,71,69,72,76,73]

如果栈是空的就入栈

[0] 如果比栈顶元素高就出栈 res[0]=1-0=1,再把自己入栈

[1]

如果比栈顶元素高就出栈 res[1]=2-1=1,再把自己入栈

[2]

71<75,直接入栈 [2,3]

69<71,直接入栈

[2,3,4]

72>69,出栈,res[4]=5-4=1

72>71, 出栈,res[3]=5-3=2,再把自己入栈

[2,5]

76>72,

res[5]=6-5=1

76>75,res[2]=6-2=4

[6]

[7]

res[1,1,4,2,1,1,0,0]

function dailyTemperatures(temperatures: number[]): number[] {
    const n = temperatures.length;
    const res:number[] = new Array(n).fill(0);
    const stack:number[] = [];
    for(let i = 0;i<n;i++){
        // 如果栈不为空 且今天温度大于栈顶温度
        while(stack.length > 0 && temperatures[i]>temperatures[stack[stack.length-1]]){
            const pre = stack.pop();
            res[pre] = i - pre;
            
        }
        stack.push(i);
    }
    return res;
};

// [73,74,75,71,69,72,76,73]