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
        }
    }
    
    

All Problems

All Solutions