1. Problem
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 <= 10^5
- 30 <= temperatures[i] <= 100
2. Solution
I solved this problem like this.
Using stack, we can solve this problem.
- If stack is empty, append idx value and idx data.
- If stack top value is more smaller than now data, pop stack and confirm top and now data again.
- If stack top value isn’t smaller than now data, append now data on stack.
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
output = [0] * len(temperatures)
stack = [(temperatures[0], 0)]
for idx, t in enumerate(temperatures):
if idx == 0:
continue
while stack:
if stack[-1][0] < t:
top_val, top_idx = stack.pop()
output[top_idx] = idx - top_idx
if stack:
continue
stack.append((t, idx))
break
return output