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.
Trapping Rain Water
样例
Trapping Rain Water
样例
如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1], 返回 6.
import java.util.Scanner;
/**
* 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.
Trapping Rain Water
样例
如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1], 返回 6.
*
* @author Dell
*
*/
public class Test363 {
public static int trapRainWater(int[] heights)
{
if(heights.length==0)
return 0;
int result=0;
int higest=heights[0];
int index_heights=-1;
for(int i=1;i<heights.length;i++)
{
if(heights[i]>higest)
{
higest=heights[i];
index_heights=i;
}
}
int i=0;
int j=heights.length-1;
int cur_i=0;
int sum1=0;
while(i<index_heights)
{
if(heights[i]<cur_i)
sum1=sum1+(cur_i-heights[i]);
if(cur_i<heights[i])
cur_i=heights[i];
i++;
}
int cur_j=0;
int sum2=0;
while(j>index_heights)
{
if(heights[j]<cur_j)
sum2=sum2+(cur_j-heights[j]);
if(cur_j<heights[j])
cur_j=heights[j];
j--;
}
result=sum1+sum2;
return result;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] heights=new int[n];
for(int i=0;i<heights.length;i++)
{
heights[i]=sc.nextInt();
}
System.out.println(trapRainWater(heights));
}
}