LeetCode Online Judge 题目C# 练习 - 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.

 1         public static int TrappingRainWater(int[] A)
 2         {
 3             if (A.Length <= 2)
 4                 return 0;
 5 
 6             int h = 0;
 7             // find the highest index
 8             for (int i = 0; i < A.Length; i++)
 9             {
10                 if (A[i] > A[h])
11                     h = i;
12             }
13 
14             int water = 0;
15             int p = 0;
16             // calculate from left to highest
17             for (int i = 1; i < h; i++)
18             {
19                 if (A[p] > A[i])
20                     water += A[p] - A[i];
21                 else
22                     p = i;
23             }
24 
25             p = A.Length - 1;
26             // calculate from right to highest
27             for (int i = A.Length - 2; i > h; i--)
28             {
29                 if (A[p] > A[i])
30                     water += A[p] - A[i];
31                 else
32                     p = i;
33             }
34 
35             return water;
36         }

代码分析:

  这是我一开始复习就在别人的面经上看到的题,数数手指也快2年了,唉。。。。什么时候才能给我OFFER啊??

  1. 找到最高的index

  2. 从左往右算water 的体积(面积)。p = 0, 如果A[i] < A[p],差值就可以承载水,如果A[i] >= A[p] ,p = i

  3. 从右往左在加一次water。 同理。

转载于:https://www.cnblogs.com/etcow/archive/2012/10/22/2734641.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值