windows.net做网站,王也道长高清头像 微信,做网站网站代理赚钱吗,湖南手机版建站系统信息503. 下一个更大元素 II#xff1a;
题目链接 给定一个循环数组 nums #xff08; nums[nums.length - 1] 的下一个元素是 nums[0] #xff09;#xff0c;返回 nums 中每个元素的 下一个更大元素 。
数字 x 的 下一个更大的元素 是按数组遍历顺序#xff0c;这个数字之…503. 下一个更大元素 II
题目链接 给定一个循环数组 nums nums[nums.length - 1] 的下一个元素是 nums[0] 返回 nums 中每个元素的 下一个更大元素 。
数字 x 的 下一个更大的元素 是按数组遍历顺序这个数字之后的第一个比它更大的数这意味着你应该循环地搜索它的下一个更大的数。如果不存在则输出 -1 。
示例 :
输入: nums [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2
数字 2 找不到下一个更大的数
第二个 1 的下一个最大的数需要循环搜索结果也是 2。解答
class Solution {public int[] nextGreaterElements(int[] nums) {int[] res new int[nums.length];Arrays.fill(res,-1);StackInteger stack new Stack();int size nums.length;stack.push(0);for (int i 1; i 2*nums.length ; i) {while (!stack.isEmpty()nums[i%size]nums[stack.peek()]){res[stack.peek()] nums[i%size];stack.pop();}stack.push(i%size);}return res;}
}算法总结
本题实际上和下一个更大元素Ⅰ那题思路是一样的唯一的区别在于我们要考虑循环的问题我们可以通过2*nums.length来扩大遍历的次数再通过取模的方式来实现更新。
42. 接雨水
题目链接 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图计算按此排列的柱子下雨之后能接多少雨水。
示例 :
输入height [0,1,0,2,1,0,1,3,2,1,2,1]
输出6
解释上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图在这种情况下可以接 6 个单位的雨水蓝色部分表示雨水。解答
class Solution {public int trap(int[] height) {int size height.length;if (size 2) return 0;// in the stack, we push the index of array// using height[] to access the real heightStackInteger stack new StackInteger();stack.push(0);int sum 0;for (int index 1; index size; index){int stackTop stack.peek();if (height[index] height[stackTop]){stack.push(index);}else if (height[index] height[stackTop]){// 因为相等的相邻墙左边一个是不可能存放雨水的所以pop左边的index, push当前的indexstack.pop();stack.push(index);}else{//pop up all lower valueint heightAtIdx height[index];while (!stack.isEmpty() (heightAtIdx height[stackTop])){int mid stack.pop();if (!stack.isEmpty()){int left stack.peek();int h Math.min(height[left], height[index]) - height[mid];int w index - left - 1;int hold h * w;if (hold 0) sum hold;stackTop stack.peek();}}stack.push(index);}}return sum;}
}算法总结
接雨水这题因为我们要考虑的是凹槽的空间所以实际上我们只要找到下一个比当前柱子大的柱子即可所以本题本质上和前面考虑的问题是一样的同时用int h Math.min(height[left], height[index]) - height[mid];来计算当前存储的高度最后加入sum中即为最终结果。