Given a list of daily temperatures T
, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0
instead.
For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73]
, your output should be [1, 1, 4, 2, 1, 1, 0, 0]
.
Note: The length of temperatures
will be in the range [1, 30000]
. Each temperature will be an integer in the range [30, 100]
Solution 1 :使用栈保存还没有找到最近升温日的index,从前往后遍历,每次到新的值就依次和栈里面的数值相比,如果比栈顶大就弹出(依照这个逻辑,这个栈一定是递减的),循环直到新的值大于栈顶,就将新值压栈,继续循环。
class Solution {//栈实现
public int[] dailyTemperatures(int[] T) {
int[] res = new int[T.length];
Stack<Integer> stack = new Stack();
for(int i=0;i<T.length;i++){
while(!stack.isEmpty() && T[stack.peek()]<T[i]){
int temp = stack.pop();
res[temp] = i-temp;
}
stack.push(i);
}
return res;
}
}
Solution2: 用数组保存栈,实现栈的功能,用top 保存栈顶。这样的好处是时间复杂度降低。
class Solution {
public int[] dailyTemperatures(int[] T) {
int[] res = new int[T.length];
int[] stack = new int[T.length];
int top=-1;
for(int i=0;i<T.length;i++){
while(top>-1 && T[i]>T[stack[top]]){
int temp = stack[top--];
res[temp] = i-temp;
}
stack[++top] = i;
}
return res;
}
}