/*
* @param heights: a list of integers
* @return: a integer
*/
public static int trapRainWater(int[] heights) {
// write your code here
if(heights ==null || heights.length<2) return 0;
int num =0;
int length = heights.length;
int[] leftArray = new int[length];
int leftMax = heights[0];
leftArray[0]=0;
int[] rightArray = new int[length];
rightArray[length-1]=0;
for(int i=1;i<length;i++) {
leftArray[i]=leftMax;
if(leftMax<heights[i]) {
leftMax = heights[i];
}
}
int rightMax = heights[length-1];
for(int i=length-2;i>=0;i--) {
rightArray[i]=rightMax;
int numtmp = Math.min(rightArray[i], leftArray[i])-heights[i];
if(numtmp>0) num +=numtmp;
if(rightMax<heights[i]){
rightMax=heights[i];
}
}
return num;
}.net