主页 > 开源代码  > 

手撕算法-接雨水


描述

分析

i位置能积累的雨水量,等于其左右两边最大高度的最小值。为了能获取i位置左右两边的最大高度。使用动态规划。两个dp数组:

leftMaxrightMax

其中

leftMax[i] 代表i位置左边的最大高度rightMax[i] 代表i位置右边的最大高度

初始状态:

leftMax[0] = 0;rightMax[0] =0;

填充这两个dp数组。

那么i位置最终能存的雨水量为:min(eftMax[i] , rightMax[i]) - height[i]

遍历所有位置,即可得到总共能接的雨水数。

代码 class Solution { public int trap(int[] height) { int n = height.length; int[] leftMax = new int[n]; int[] rightMax = new int[n]; leftMax[0] = height[0]; for (int i = 1; i < n; i++) { leftMax[i] = Math.max(leftMax[i - 1], height[i]); } rightMax[n - 1] = height[n - 1]; for (int i = n - 2; i >= 0; i--) { rightMax[i] = Math.max(rightMax[i + 1], height[i]); } int res = 0; for (int i = 0; i < n; i++) { res += Math.min(leftMax[i], rightMax[i]) - height[i]; } return res; } }

面试公司
标签:

手撕算法-接雨水由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“手撕算法-接雨水