接雨水

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.

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

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值