一 题目
二 思路
单调栈
我们用栈存储上一次还没找到更大温度的下标值
那么每次我们遍历新的数据都可以把之前小于本温度的数据进行弹栈
那么栈中温度必然是单调下降的
三 代码:
public int[] dailyTemperatures(int[] temperatures) {
int len=temperatures.length;
int[] res=new int[len];
//存储还没设置更高温度位数的下标
Stack<Integer> st = new Stack<>();
for (int i = 0; i < temperatures.length; i++) {
//如果本次遍历的温度大于栈中上一个存储的温度,直到不大于
//其实这一步也说明了,栈中数据必定是温度递减的,不然该温度必然出栈了
while (!st.isEmpty()&&temperatures[i]>temperatures[st.peek()]){
int v=st.pop();
res[v]=i-v;
}
st.push(i);
}
return res;
}