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
Solution 1: Monotonic Stack
This problem requires us to find the position of the first element greater than each element to its right, which is a typical application scenario for a monotonic stack.
We traverse the array \(\textit{temperatures}\) from right to left, maintaining a stack \(\textit{stk}\) that is monotonically increasing from top to bottom in terms of temperature. The stack stores the indices of the array elements. For each element \(\textit{temperatures}[i]\), we continuously compare it with the top element of the stack. If the temperature corresponding to the top element of the stack is less than or equal to \(\textit{temperatures}[i]\), we pop the top element of the stack in a loop until the stack is empty or the temperature corresponding to the top element of the stack is greater than \(\textit{temperatures}[i]\). At this point, the top element of the stack is the first element greater than \(\textit{temperatures}[i]\) to its right, and the distance is \(\textit{stk.top()} - i\). We update the answer array accordingly. Then we push \(\textit{temperatures}[i]\) onto the stack and continue traversing.
After the traversal, we return the answer array.
The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array \(\textit{temperatures}\).
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|