739.Daily Temperatures
===
###### tags: `Medium`,`Array`,`Stack`
[739. Daily Temperatures](https://leetcode.com/problems/daily-temperatures/)
### 題目描述
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 i^th^ 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` <= 10^5^
* 30 <= `temperatures[i]` <= 100
### 解答
#### Javascript
```javascript=
function dailyTemperatures(temperatures) {
const result = [];
for (let i = 0; i < temperatures.length; i++) {
result[i] = 0;
}
const stack = [];
for (let i = 0; i < temperatures.length; i++) {
while (stack.length && temperatures[i] > temperatures[stack[stack.length - 1]]) {
const current = stack.pop();
result[current] = i - current;
}
stack.push(i); // 只存index就可以了
}
return result;
}
```
>[name=Marsgoat][time= Dec 18, 2022]
#### C#
```csharp=
public class Solution {
public int[] DailyTemperatures(int[] temperatures) {
int[] output = new int[temperatures.Length];
for (int i = temperatures.Length - 1; i >= 0; i--) {
int j = i + 1;
while (j < temperatures.Length) {
if (temperatures[j] > temperatures[i]) {
output[i] = j - i;
break;
}
j += Math.Max(1, output[j]);
}
}
return output;
}
}
```
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)