
Sponsored
Sponsored
The monotonic stack approach is an efficient way to solve this problem by maintaining a stack to keep track of temperatures and their indices. We iterate over the temperatures, and for each temperature, we check if it is warmer than the temperature represented by the top index of the stack. If it is, we calculate the difference in indices to determine the number of days to wait for a warmer temperature.
This approach uses a stack to store indices of temperatures that are waiting for a warmer day. As we iterate through the list, for each temperature, we pop from the stack until the current temperature is not warmer than the temperature at the index stored at the top of the stack.
Time Complexity: O(n) - Each index is pushed and popped from the stack once.
Space Complexity: O(n) - Space used by the stack to store indices.
1def dailyTemperatures(temperatures):
2 answer = [0] * len(temperatures)
3 stack = [] # stores indices
4 for i, temp in enumerate(temperatures):
5 while stack and temperatures[stack[-1]] < temp:
6 prev_index = stack.pop()
7 answer[prev_index] = i - prev_index
8 stack.append(i)
9 return answerThe Python solution initializes a list 'answer' filled with zeros. A stack is maintained to store indices of temperatures waiting for a higher temperature. As we iterate through the 'temperatures' list, we compare the current temperature with temperatures indicated by indices in the stack. If the current temperature is higher, that means we have found a higher temperature for the indices in the stack. We then update the 'answer' list with the number of days. Otherwise, the current index is added to the stack.
This approach traverses the temperature list backwards, efficiently discovering the number of days until encountering a warmer temperature. The main idea is to use an array to store the index of the next day for each temperature that is higher. By starting from the end and moving backwards, the solution is optimized in terms of lookups and updates.
Time Complexity: O(n * W) - Where W is the range of temperature values (bounded by a constant, thus linear in practice).
Space Complexity: O(W) - Space used by the array to store the closest warmer day's index.
1function dailyTemperatures(temperatures) {
2The JavaScript implementation leverages a 'next' array to record when the next warmer temperature occurs. The function iterates in reverse order to effectively determine the number of days to wait for a temperature increase.