我将练习下面的单调栈问题
1. 每日温度【8.12】
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
基本思想
代码展示
有了上面的基本的描述,我们就可以有了基本的思路了
①我们需要创建一个栈来帮助我们进行操作
②我们需要一个数组来存放我们的结果
③我们需要弄清楚我们的题目的核心在于:只要后面的元素大于前面的,我们就可以立刻找到它对应的所要求得的解!
while(!stack.isEmpty && temperature[i]>tempareture[stack.peek()])
最后的代码如下所示:
class Solution{
public int[] dailyTemperatures(int[] temperatures) {
int len=temperatures.length;
Stack<Integer> stack = new Stack<>();
int [] answer=new int[len];
//需要把栈为空放在前面,才不会导致后面出现找不到元素的可能!
for(int i=0;i<len;i++){
while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()] ){
//满足条件的时候在对应的位置上放上对应的值
answer[stack.peek()]=i-stack.peek();
stack.pop();
}
stack.push(i);
}
return answer;
}
}
总结
①记住单调栈是怎么使用的,下次如果遇到相反的情况又是否会使用?
②针对上一点,我来进行一个简单的概括
③最后我们需要记住,如果我们需要对栈是不是为空进行判断同时后面的表达式也和栈有关系,栈为空的表达式一定要放在最前面,免得后面出现栈指向异常!