- 496. Next Greater Element I
- 503. Next Greater Element II
- 739. Daily Temperatures
- 1118. Number of Days in a Month
- 42. Trapping Rain Water
单调栈
单调栈:以一种策略入栈出栈,保持栈内元素单调; 通常用于解决满足某个条件的下一个元素问题(Next Greater Element问题);
如: 一个数组,找到每个元素的后续最近的更大元素; 保持栈单调递增,即每次元素入栈,栈顶元素都是比当前元素要大,也就是栈顶元素就是当前元素的下一个更大元素;
public int[] nextGreaterElement(int[] nums) { Stack<Integer> stack = new Stack<>(); int[] nextGreaterArray = new int[nums.length]; for (int i = nums.length - 1; i >= 0; i--) { // 比较栈顶,如不满足单调,则pop出栈 while (!stack.isEmpty() && nums[i] > stack.peek()) { stack.pop(); } // 处理当前元素,这里是记录当前元素的next greater int nextGreater = stack.isEmpty() ? -1 : stack.peek(); nextGreaterArray[i] = nextGreater; // 当前元素入栈 stack.push(nums[i]); } ... }
针对不同问题场景,以不同的方式处理next element,如:哈希表、记录数值、记录索引等;