题目
Given a list of daily temperatures, produce a list 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 temperatures = [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].
答案
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n = temperatures.length;
int[] ans = new int[n];
Stack<Integer> temp_stk = new Stack<>();
Stack<Integer> idx_stk = new Stack<>();
for(int i = 0; i < n; i++) {
int curr_temp = temperatures[i];
while(!temp_stk.empty() && temp_stk.peek() < curr_temp) {
int t = temp_stk.pop();
int idx = idx_stk.pop();
ans[idx] = i - idx;
}
temp_stk.push(curr_temp);
idx_stk.push(i);
}
return ans;
}
}
网友评论