代码随想录训练营二刷第六十一天

编程入门 行业动态 更新时间:2024-10-10 03:29:12

代码随想录<a href=https://www.elefans.com/category/jswz/34/1769135.html style=训练营二刷第六十一天"/>

代码随想录训练营二刷第六十一天

代码随想录训练营二刷第六十一天 | 503.下一个更大元素II ● 42. 接雨水

一、503.下一个更大元素II

题目链接:/
思路:循环数组多遍历一次,逻辑上拼一块往单调栈里放。

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

二、42. 接雨水

题目链接:/
思路:接雨水得是凹槽处才能接,如2,1,3。1是凹槽,h是左右第一个高点中的最小者,w是右侧-左侧-1。如此栈内应放索引,应为自栈顶到栈底单调递减,当前元素小于栈顶加入,等于栈顶替换掉,大于栈顶就找到右边第一个最大值了。此时便可出栈计算。

class Solution {public int trap(int[] height) {Deque<Integer> stack = new LinkedList<>();int sum = 0;stack.push(0);for (int i = 1; i < height.length; i++) {if (height[i] < height[stack.peek()]) {stack.push(i);} else if (height[i] == height[stack.peek()]) {stack.pop();stack.push(i);} else {while (!stack.isEmpty() && height[i] > height[stack.peek()]) {int mid = stack.pop();if (!stack.isEmpty()) {int h = Math.min(height[i], height[stack.peek()]) - height[mid];int w = i - stack.peek() - 1;sum += h * w;}}stack.push(i);}}return sum;}
}

更多推荐

代码随想录训练营二刷第六十一天

本文发布于:2023-12-05 03:20:15,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1662906.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:训练营   代码   随想录

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!