739. 每日温度:
题目链接 :739. 每日温度
题目:请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。
思路:
1、 遍历法
(1)向后遍历寻找大于当前值的元素
(2)将两个元素的下标之差放入新的结果数组
2、单调栈法
(1)元素压入一个栈中,栈中元素保持栈顶元素最小,栈底元素最大
(2)遍历数组元素,将其与当前栈顶值比较
(3)栈顶值小于当前索引对于数组值,栈顶值出栈,并且记录的间隔数= (当前索引-栈顶值),当前索引值入栈
(4)反之将当前索引值压入栈,保持了栈顶元素始终最小的规律
AC代码:
- 遍历法:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int len=temperatures.length;
int[] re = new int[len];
for(int i=0;i<len;i++)
{
int cur=temperatures[i];
if(cur<100)
{
for(int j=i+1;j<len;j++)
{
if(temperatures[j]>cur)
{
re[i]=j-i;
break;
}
}
}
}
return re;
}
}
- 单调栈法
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int len=temperatures.length;
int[] ans=new int[len];
Deque <Integer> dq=new LinkedList<>();
for(int i=0;i<len;i++)
{
int tmp=temperatures[i];
while(!dq.isEmpty()&&tmp>temperatures[dq.peek()])
{
int preIdx=dq.pop();
ans[preIdx]=i-preIdx;
}
dq.push(i);
}
return ans;
}
}