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 猪猪🐷 阅读(89) 评论(0) 收藏 举报
浙公网安备 33010602011771号