每日温度
问题陈述
请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
问题求解
双指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public int[] dailyTemperatures(int[] T) { int[] res=new int[T.length]; for(int i=0;i<T.length;i++){ for(int j=i+1;j<T.length;j++){ if(T[j]>T[i]){ res[i]=j-i; break; } } } return res; } }
|
单调栈
1 2 3 4 5 6 7 8 9 10 11 12
| public int[] dailyTemperatures(int[] T) { Stack<Integer> stack = new Stack<>(); int[] ret = new int[T.length]; for (int i = 0; i < T.length; i++) { while (!stack.isEmpty() && T[i] > T[stack.peek()]) { int idx = stack.pop(); ret[idx] = i - idx; } stack.push(i); } return ret; }
|