Trapping Rain Water

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!

思路:

找到最高的一个板子,然后从两边往中间靠近,如果高度小于当前的最大高度,结果加上当前最大高度-板子高度,否则不存水,只更新最大高度即可。

代码:

 1     int trap(int A[], int n) {
 2         // IMPORTANT: Please reset any member data you declared, as
 3         // the same Solution instance will be reused for each test case.
 4         int i;
 5         int curmax, max = INT_MIN, maxIndex, result = 0;
 6         if(n == 0)
 7             return 0;
 8         for(i = 0; i < n; i++){
 9             if(A[i] > max){
10                 max = A[i];
11                 maxIndex = i;
12             }
13         }
14         curmax = A[0];
15         for(i = 1; i < maxIndex; i++){
16             if(A[i] < curmax){
17                 result += (curmax-A[i]);
18             }
19             else{
20                 curmax = A[i];
21             }
22         }
23         curmax = A[n-1];
24         for(i = n-2; i > maxIndex; i--){
25             if(A[i] < curmax){
26                 result += (curmax-A[i]);
27             }
28             else{
29                 curmax = A[i];
30             }
31         }
32         return result;
33     }

 

posted on 2013-11-09 09:05  waruzhi  阅读(262)  评论(0编辑  收藏  举报

导航