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]