您的位置:首页 > 移动开发

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 
[0,1,0,2,1,0,1,3,2,1,2,1]
, return 
6
.



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));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode 算法