503.下一个更大元素I
class Solution { public int[] nextGreaterElements(int[] nums) { //边界判断 if(nums == null || nums.length <= 1) { return new int[]{-1}; } int size = nums.length; int[] result = new int[size];//存放结果 Arrays.fill(result,-1);//默认全部初始化为-1 Stack<Integer> st= new Stack<>();//栈中存放的是nums中的元素下标 for(int i = 0; i < 2*size; i++) { while(!st.empty() && nums[i % size] > nums[st.peek()]) { result[st.peek()] = nums[i % size];//更新result st.pop();//弹出栈顶 } st.push(i % size); } return result; } }
42. 接雨水
class Solution { public int trap(int[] height) { int sum = 0; for (int i = 0; i < height.length; i++) { // 第一个柱子和最后一个柱子不接雨水 if (i==0 || i== height.length - 1) continue; int rHeight = height[i]; // 记录右边柱子的最高高度 int lHeight = height[i]; // 记录左边柱子的最高高度 for (int r = i+1; r < height.length; r++) { if (height[r] > rHeight) rHeight = height[r]; } for (int l = i-1; l >= 0; l--) { if(height[l] > lHeight) lHeight = height[l]; } int h = Math.min(lHeight, rHeight) - height[i]; if (h > 0) sum += h; } return sum; } }