package LeetCode.stackpart01; import java.util.Deque; import java.util.LinkedList; /** * 739. 每日温度 * 给定一个整数数组 temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第 i 天,下一个更高温度出现在几天后。 * 如果气温在这之后都不会升高,请在该位置用 0 来代替。 * */ public class DailyTemperatures_739 { public int[] dailyTemperatures(int[] temperatures) { int lens=temperatures.length; int []res=new int[lens]; /** 如果当前遍历的元素 大于栈顶元素,表示 栈顶元素的 右边的最大的元素就是 当前遍历的元素, 所以弹出 栈顶元素,并记录 如果栈不空的话,还要考虑新的栈顶与当前元素的大小关系 否则的话,可以直接入栈。 注意,单调栈里 加入的元素是 下标。 */ Deque<Integer> stack=new LinkedList<>(); stack.push(0); for(int i=1;i<lens;i++){ if(temperatures[i]<=temperatures[stack.peek()]){ stack.push(i); }else{ while(!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]){ res[stack.peek()]=i-stack.peek(); stack.pop(); } stack.push(i); } } return res; } }
package LeetCode.stackpart01; import java.util.Arrays; import java.util.HashMap; import java.util.Stack; /** * 496. 下一个更大元素 I * */ public class NextGreaterElementI_496 { public int[] nextGreaterElement(int[] nums1, int[] nums2) { Stack<Integer> temp = new Stack<>(); int[] res = new int[nums1.length]; Arrays.fill(res,-1); HashMap<Integer, Integer> hashMap = new HashMap<>(); for (int i = 0 ; i< nums1.length ; i++){ hashMap.put(nums1[i],i); } temp.add(0); for (int i = 1; i < nums2.length; i++) { if (nums2[i] <= nums2[temp.peek()]) { temp.add(i); } else { while (!temp.isEmpty() && nums2[temp.peek()] < nums2[i]) { if (hashMap.containsKey(nums2[temp.peek()])){ Integer index = hashMap.get(nums2[temp.peek()]); res[index] = nums2[i]; } temp.pop(); } temp.add(i); } } return res; } }
标签:util,part01,res,元素,day58,int,739,new,stack From: https://www.cnblogs.com/lipinbigdata/p/17486648.html