首页 > 代码库 > [leetcode]Trapping Rain Water
[leetcode]Trapping Rain Water
Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given[0,1,0,2,1,0,1,3,2,1,2,1]
, return6
.The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!
算法思路:
短板效应,蓄水量与桶的短板相关。求出height数组中的最长板,然后从两端向长板迭代,遇到更短的则求出蓄水量,遇到较长的,则更新边缘。
代码如下:
1 public class Solution { 2 public int trap(int[] height) { 3 if(height == null || height.length < 3) return 0; 4 int max = 0; 5 for(int i = 0; i < height.length;i++){ 6 if(height[i] > height[max]) max = i; 7 } 8 int high = 0,res = 0; 9 for(int i = 0; i < max; i++){10 if(height[i] < height[high]){11 res += height[high] - height[i];12 }else if(height[i] > height[high]){13 high = i;14 }15 }16 high = height.length - 1;17 for(int i = height.length - 1; i > max; i--){18 if(height[i] < height[high]){19 res += height[high] - height[i];20 }else if(height[i] > height[high]){21 high = i;22 }23 }24 return res;25 }26 }
具体算法分析可以参考这里。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。