题目
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。
解法一 暴力解
class Solution {
public int[] dailyTemperatures(int[] T) {
int[] count=new int[T.length];
for(int i=0;i<T.length;i++){
for(int j=i;j<T.length;j++){
if(T[j]>T[i]){
count[i]=j-i;
break;
}
}
}
return count;
}
}
笔记:
- java中数组初始化的默认值是0.
解法二
class Solution {
public int[] dailyTemperatures(int[] T) {
int[] count=new int[T.length];
Deque<Integer> stack=new LinkedList<Integer>();
for(int i=0;i<T.length;i++){
while(!stack.isEmpty() && T[stack.peek()]<T[i]){
int preIndex=stack.pop();
count[preIndex]=i-preIndex;
}
stack.push(i);
}
return count;
}
}
笔记:
- 如何同时存储index和T[index]呢?在stack中只储存index,使用时代入数组T中。
- 思路:遍历,将数组T中的元素放入stack中,若后面的元素比前面的元素大,则弹出前面的元素并计算出两者的index差值输出到答案数组中。