算法day41-单调栈(1)
目录
- 每日温度
- 下一个更大元素I
- 下一个更大元素II
一、每日温度
https://leetcode.cn/problems/daily-temperatures/description/?envType=problem-list-v2&envId=8At1GmaZ

class Solution { public int[] dailyTemperatures(int[] temperatures) { int length = temperatures.length; int[] res = new int[length]; Deque<Integer> stack = new LinkedList<>(); for(int i=0; i<length; i++){ int temperature = temperatures[i]; while(!stack.isEmpty() && temperature > temperatures[stack.peek()]){ int preIndex = stack.pop(); res[preIndex] = i-preIndex; //栈顶元素碰到最近的比它高的温度了! } stack.push(i); } return res; } }
二、下一个更大元素I
https://leetcode.cn/problems/next-greater-element-i/?envType=problem-list-v2&envId=8At1GmaZ

class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { int len1 = nums1.length; int len2 = nums2.length; int[] res = new int[len1]; Arrays.fill(res, -1); Map<Integer,Integer> map = new HashMap<>(); Deque<Integer> stack = new LinkedList<>(); for(int i=0; i<len2; i++){ int num = nums2[i]; while(!stack.isEmpty() && num > stack.peek()){ int temp = stack.pop(); map.put(temp, num); } stack.push(num); } for(int i=0; i<len1; i++){ res[i] = map.getOrDefault(nums1[i], -1); } return res; } }
三、下一个更大元素II
https://leetcode.cn/problems/next-greater-element-ii/?envType=problem-list-v2&envId=8At1GmaZ

class Solution { public int[] nextGreaterElements(int[] nums) { int len = nums.length; int[] res = new int[len]; Deque<Integer> stack = new LinkedList<>(); Arrays.fill(res, -1); for(int i=0; i<2*len - 1; i++){ int idx = i % len; int num = nums[idx]; while(!stack.isEmpty() && num > nums[stack.peek()]){ int prevIdx = stack.pop(); res[prevIdx] = num; } stack.push(idx); } return res; } }
浙公网安备 33010602011771号