# 739. Daily Temperatures

## Description

Given an array of integers temperatures represents the daily temperatures, return an array answer such that answer[i] is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep answer[i] == 0 instead.

Example 1:

Input: temperatures = [73,74,75,71,69,72,76,73]
Output: [1,1,4,2,1,1,0,0]


Example 2:

Input: temperatures = [30,40,50,60]
Output: [1,1,1,0]


Example 3:

Input: temperatures = [30,60,90]
Output: [1,1,0]


Constraints:

• 1 <= temperatures.length <= 105
• 30 <= temperatures[i] <= 100

## Solutions

Easy solution with stack.

Everytime a higher temperature is found, we update answer of the peak one in the stack.

If the day with higher temperature is not found, we leave the ans to be the default 0.

• class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n = temperatures.length;
int[] ans = new int[n];
Deque<Integer> stk = new ArrayDeque<>();
for (int i = 0; i < n; ++i) {
while (!stk.isEmpty() && temperatures[stk.peek()] < temperatures[i]) {
int j = stk.pop();
ans[j] = i - j;
}
stk.push(i);
}
return ans;
}
}

• class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
vector<int> ans(n);
stack<int> stk;
for (int i = 0; i < n; ++i) {
while (!stk.empty() && temperatures[stk.top()] < temperatures[i]) {
ans[stk.top()] = i - stk.top();
stk.pop();
}
stk.push(i);
}
return ans;
}
};

• class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
ans = [0] * len(temperatures)
stk = []
for i, t in enumerate(temperatures):
while stk and temperatures[stk[-1]] < t:
j = stk.pop()
ans[j] = i - j
stk.append(i)
return ans


• func dailyTemperatures(temperatures []int) []int {
ans := make([]int, len(temperatures))
var stk []int
for i, t := range temperatures {
for len(stk) > 0 && temperatures[stk[len(stk)-1]] < t {
j := stk[len(stk)-1]
ans[j] = i - j
stk = stk[:len(stk)-1]
}
stk = append(stk, i)
}
return ans
}

• function dailyTemperatures(temperatures: number[]): number[] {
const n = temperatures.length;
const ans = new Array(n).fill(0);
const stk: number[] = [];
for (let i = n - 1; i >= 0; --i) {
while (stk.length && temperatures[stk[stk.length - 1]] <= temperatures[i]) {
stk.pop();
}
if (stk.length) {
ans[i] = stk[stk.length - 1] - i;
}
stk.push(i);
}
return ans;
}


• /**
* @param {number[]} temperatures
* @return {number[]}
*/
var dailyTemperatures = function (temperatures) {
const n = temperatures.length;
const ans = new Array(n).fill(0);
const stk = [];
for (let i = n - 1; i >= 0; --i) {
while (stk.length && temperatures[stk[stk.length - 1]] <= temperatures[i]) {
stk.pop();
}
if (stk.length) {
ans[i] = stk[stk.length - 1] - i;
}
stk.push(i);
}
return ans;
};


• impl Solution {
pub fn daily_temperatures(temperatures: Vec<i32>) -> Vec<i32> {
let n = temperatures.len();
let mut stack = vec![];
let mut res = vec![0; n];
for i in 0..n {
while !stack.is_empty() && temperatures[*stack.last().unwrap()] < temperatures[i] {
let j = stack.pop().unwrap();
res[j] = (i - j) as i32;
}
stack.push(i);
}
res
}
}