739. 每日温度
class Solution {public int[] dailyTemperatures(int[] temperatures) {LinkedList<Integer> st = new LinkedList<>();st.push(0);int[] res = new int[temperatures.length];for (int i = 1; i < temperatures.length; i++) {while (!st.isEmpty() && temperatures[i] > temperatures[st.peek()]) {res[st.peek()] = i - st.peek();st.pop();}st.push(i);}return res;}
}
496. 下一个更大元素 I
class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Map<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums1.length; i++) {map.put(nums1[i], i);}int[] res = new int[nums1.length];Arrays.fill(res, -1);LinkedList<Integer> st = new LinkedList<>();st.push(0);for (int i = 1; i < nums2.length; i++) {while (!st.isEmpty() && nums2[i] > nums2[st.peek()]) {if (map.containsKey(nums2[st.peek()])) {res[map.get(nums2[st.peek()])] = nums2[i];}st.pop();}st.push(i);}return res;}
}
42. 接雨水
class Solution {public int trap(int[] height) {int sum = 0;LinkedList<Integer> st = new LinkedList<>();st.push(0);for (int i = 0; i < height.length; i++) {while (!st.isEmpty() && height[i] > height[st.peek()]) {Integer top = st.peek();st.pop();int midVal = height[top];if (st.isEmpty()) {break;}int h = Integer.min(height[i], height[st.peek()]) - midVal;int w = i - st.peek() - 1;sum += h * w;}st.push(i);}return sum;}
}