Welcome to Subscribe On Youtube
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
Easy solution with stack.
Everytime a higher temperature is found, we update answer of the peak one in the stack.
If the day with higher temperature is not found, we leave the ans to be the default 0
.
-
class Solution { public int[] dailyTemperatures(int[] temperatures) { int n = temperatures.length; int[] ans = new int[n]; Deque<Integer> stk = new ArrayDeque<>(); for (int i = 0; i < n; ++i) { while (!stk.isEmpty() && temperatures[stk.peek()] < temperatures[i]) { int j = stk.pop(); ans[j] = i - j; } stk.push(i); } return ans; } }
-
class Solution { public: vector<int> dailyTemperatures(vector<int>& temperatures) { int n = temperatures.size(); vector<int> ans(n); stack<int> stk; for (int i = 0; i < n; ++i) { while (!stk.empty() && temperatures[stk.top()] < temperatures[i]) { ans[stk.top()] = i - stk.top(); stk.pop(); } stk.push(i); } return ans; } };
-
class Solution: def dailyTemperatures(self, temperatures: List[int]) -> List[int]: ans = [0] * len(temperatures) stk = [] for i, t in enumerate(temperatures): while stk and temperatures[stk[-1]] < t: j = stk.pop() ans[j] = i - j stk.append(i) return ans
-
func dailyTemperatures(temperatures []int) []int { ans := make([]int, len(temperatures)) var stk []int for i, t := range temperatures { for len(stk) > 0 && temperatures[stk[len(stk)-1]] < t { j := stk[len(stk)-1] ans[j] = i - j stk = stk[:len(stk)-1] } stk = append(stk, i) } return ans }
-
function dailyTemperatures(temperatures: number[]): number[] { const n = temperatures.length; const ans = new Array(n).fill(0); const stk: number[] = []; for (let i = n - 1; i >= 0; --i) { while (stk.length && temperatures[stk[stk.length - 1]] <= temperatures[i]) { stk.pop(); } if (stk.length) { ans[i] = stk[stk.length - 1] - i; } stk.push(i); } return ans; }
-
/** * @param {number[]} temperatures * @return {number[]} */ var dailyTemperatures = function (temperatures) { const n = temperatures.length; const ans = new Array(n).fill(0); const stk = []; for (let i = n - 1; i >= 0; --i) { while (stk.length && temperatures[stk[stk.length - 1]] <= temperatures[i]) { stk.pop(); } if (stk.length) { ans[i] = stk[stk.length - 1] - i; } stk.push(i); } return ans; };
-
impl Solution { pub fn daily_temperatures(temperatures: Vec<i32>) -> Vec<i32> { let n = temperatures.len(); let mut stack = vec![]; let mut res = vec![0; n]; for i in 0..n { while !stack.is_empty() && temperatures[*stack.last().unwrap()] < temperatures[i] { let j = stack.pop().unwrap(); res[j] = (i - j) as i32; } stack.push(i); } res } }