LeetCode_42---Trapping Rain Water
2015-06-19 11:18
489 查看
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
![](http://www.leetcode.com/wp-content/uploads/2012/08/rainwatertrap.png)
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!
Hide Tags
Array Stack Two
Pointers
Code:
package From41;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author MohnSnow
* @time 2015年6月19日 上午9:59:26
*
*/
public class LeetCode42 {
/**
* @param argsmengdx
* -fnst
*/
//312msA
public static int trap(int[] height) {
if (height.length <= 2) {
return 0;
}
int len = height.length;
int bigIndex = 0;
int sum = 0;
for (int i = 1; i < len; i++) {//先找到最高点,然后两头向中间走,最高点有多个呢?
if (height[i] > height[bigIndex]) {
bigIndex = i;
}
}
int leftMax = height[0];
for (int i = 1; i < bigIndex; i++) {
if (height[i] >= leftMax) {
leftMax = height[i];
} else {
sum += leftMax - height[i];
}
}
int rightMax = height[len - 1];
for (int i = len - 2; i > bigIndex; i--) {
if (height[i] >= rightMax) {
rightMax = height[i];
} else {
sum += rightMax - height[i];
}
}
return sum;
}
public static void main(String[] args) {
int[] nums = { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 3 };
System.out.println("第一个非正值1 : " + trap(nums));
}
}
For example,
Given
[0,1,0,2,1,0,1,3,2,1,2,1], return
6.
![](http://www.leetcode.com/wp-content/uploads/2012/08/rainwatertrap.png)
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!
Hide Tags
Array Stack Two
Pointers
Code:
package From41;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author MohnSnow
* @time 2015年6月19日 上午9:59:26
*
*/
public class LeetCode42 {
/**
* @param argsmengdx
* -fnst
*/
//312msA
public static int trap(int[] height) {
if (height.length <= 2) {
return 0;
}
int len = height.length;
int bigIndex = 0;
int sum = 0;
for (int i = 1; i < len; i++) {//先找到最高点,然后两头向中间走,最高点有多个呢?
if (height[i] > height[bigIndex]) {
bigIndex = i;
}
}
int leftMax = height[0];
for (int i = 1; i < bigIndex; i++) {
if (height[i] >= leftMax) {
leftMax = height[i];
} else {
sum += leftMax - height[i];
}
}
int rightMax = height[len - 1];
for (int i = len - 2; i > bigIndex; i--) {
if (height[i] >= rightMax) {
rightMax = height[i];
} else {
sum += rightMax - height[i];
}
}
return sum;
}
public static void main(String[] args) {
int[] nums = { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 3 };
System.out.println("第一个非正值1 : " + trap(nums));
}
}
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#数据结构与算法揭秘二
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#常见算法面试题小结
- JavaScript 组件之旅(二)编码实现和算法
- PHP排序算法类实例