# LC 739. Daily Temperatures
### [Problem link](https://leetcode.com/problems/daily-temperatures/)
###### tags: `leedcode` `python` `c++` `medium` `Monotone Stack`
Given an array of integers <code>temperatures</code> represents the daily temperatures, return an array <code>answer</code> such that <code>answer[i]</code> is the number of days you have to wait after the <code>i<sup>th</sup></code> day to get a warmer temperature. If there is no future day for which this is possible, keep <code>answer[i] == 0</code> 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:**
- <code>1 <=temperatures.length <= 10<sup>5</sup></code>
- <code>30 <=temperatures[i] <= 100</code>
## Solution 1 - Monotone Stack
#### Python
```python=
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
n = len(temperatures)
res = [0] * n
stack = []
for idx, tem in enumerate(temperatures):
while stack and tem > temperatures[stack[-1]]:
i = stack.pop()
res[i] = idx - i
stack.append(idx)
return res
```
#### C++
```cpp=
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
vector<int> st;
vector<int> res(n, 0);
for (int i = 0; i < temperatures.size(); i++) {
while (!st.empty() && temperatures[st.back()] < temperatures[i]) {
res[st.back()] = i - st.back();
st.pop_back();
}
st.push_back(i);
}
return res;
}
};
```
>### Complexity
>| | Time Complexity | Space Complexity |
>| ----------- | --------------- | ---------------- |
>| Solution 1 | O(n) | O(n) |
## Note
[monotone stack](https://hackmd.io/@meyr543/rkjS-x6wY)