网站流量如何突破,养殖公司起名字大全免费,微信手机网站,网站网页设计有哪些42.接雨水
这是一个简单的动态规划问题#xff0c;虽然leetcode将它归结为困难。
但是我感觉它难度应该达不到#xff0c;可能归结为中等比较合适0x1 题目
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图#xff0c;计算按此排列的柱子#xff0c;下雨之后能接多少雨…42.接雨水
这是一个简单的动态规划问题虽然leetcode将它归结为困难。
但是我感觉它难度应该达不到可能归结为中等比较合适0x1 题目
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图计算按此排列的柱子下雨之后能接多少雨水。
题目地址https://leetcode.cn/problems/trapping-rain-water/description/
0x2 示例
//如上图
输入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 个单位的雨水蓝色部分表示雨水。输入height [4,2,0,3,2,5]
输出90x3 解题思路
对于这道题目雨水的体积等于每一列雨水能达到的最大高度-柱子高度的累加。 那么接下来我们的重心就是如何求取这个最大高度。除去两边的临界条件其他中间所有的柱子我们只需要向两边看两边看到的最小高度就是我们所能达到的最大高度。以中间某个柱子为例。
代码
public int trap(int[] height) {int n height.length;if(n0){return 0;}int[] leftMax new int[n];leftMax[0] height[0];for(int i 1; i n; i){leftMax[i] Math.max(leftMax[i-1],height[i]);}int[] rightMax new int[n];rightMax[n-1] height[n-1];for(int i n-2; i 0; i--){rightMax[i] Math.max(rightMax[i1],height[i]);}int res 0;for(int i 0; i n; i){res Math.min(leftMax[i],rightMax[i]) - height[i];}return res;
}