739. Daily Temperatures

Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0 instead.
For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73], your output should be [1, 1, 4, 2, 1, 1, 0, 0].
Note: The length of temperatures will be in the range [1, 30000]. Each temperature will be an integer in the range [30, 100].




class Solution {
    public int[] dailyTemperatures(int[] T) {
        // use stack , similar as next element 
        // traverse the int[] from right to left 
        // use stack to store the index, because we want to know how far two index are away from each other 
        // same rule, if the the the stack is not empty and T[stack.peek()] < T[current element], stack.pop() 
        // do this until the stack is empty or the T[stack.peek()] > T[current element]
        // if the stack is empty, return 0, if  T[stack.peek()] > T[current element], return stack.peek() - current element 
        Stack<Integer> stack = new Stack<>();
        int[] res = new int[T.length];
        for(int i = T.length - 1; i >= 0; i--){
            while(!stack.isEmpty() && T[stack.peek()] <= T[i]){ // bug 3 :  47  47 , not warmer , need to pop as well 
                stack.pop();
            }
            if(stack.isEmpty()) res[i] = 0;  // 0, 0, 1, 1, 2 , 
            if(!stack.isEmpty() && T[stack.peek()] > T[i]) res[i] = stack.peek() - i; // bug 2 : check if stack.isEmpty()
            stack.push(i); // bug 1 : should push index, 
        }
        return res;
    }
}

 

posted on 2018-11-09 10:36  猪猪&#128055;  阅读(89)  评论(0)    收藏  举报

导航