# 739. Daily Temperatures (Medium)

https://leetcode.com/problems/daily-temperatures/

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]`.

## Solutions

``````class Solution {
public int[] dailyTemperatures(int[] T) {
if (T == null || T.length == 0) {
return new int[0];
}

int[] ans = new int[T.length];

Stack<Integer> stack = new Stack<>();
for (int i = 0; i < T.length; i++) {

// also push in same temperature
if (stack.isEmpty() || T[stack.peek()] >= T[i]) {
stack.push(i);

continue;
}

// [73], 74
// [75,71,69], 72
// T[stack.peek()] < T[i]
while (!stack.isEmpty() && T[stack.peek()] < T[i]) {
int preDay = stack.pop();

ans[preDay] = i - preDay;
}

// After pop out all the lower temperatures, push in T[i]
stack.push(i);
}

return ans;
}
}
``````