739. 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 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:
Example 2:
Example 3:
Constraints:
1 <= temperatures.length <= 105
30 <= temperatures[i] <= 100
Solution:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n = temperatures.length;
int[] answer = new int[n];
Deque<Integer> stack = new ArrayDeque<>();
// 0 1 2 3 4 5 6 7
// [73,74,75,71,69,72,76,73]
// i
// 7, 6
for (int i = 0; i < n; i++){
int currentTemp = temperatures[i];
// 73 // 74 // 75 // 71 // 69 // 72// 76 // 73
// ! && 73 < 74 // ! && 74 <75
// 0 /// 1
// answer[0] = 1 - 0 = 1; // a[1] = 2 - 1 = 1
// ! && 75 > 71
// ! && 71 > 69
// ! && 69 < 72
// 4
// answer[4] = 5 - 4 = 1
// ! && 71 < 72
// answer[3] = 5 -3 = 2
// ! && 75 > 72
// ! && 72 < 76
// answer[5] = 6 - 5 = 1
// ! && 75 < 76
// answer[2] = 6 -2 =4
// ! && 76 > 73
//
while(!stack.isEmpty() && temperatures[stack.peek()] < currentTemp){
int prevDay = stack.pollFirst();
answer[prevDay] = i - prevDay;
}
stack.offerFirst(i);
}
return answer;
}
}
// TC: O(n)
// SC: O(n)