题目
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.
分析
- 先遍历一遍找到最大值,记录index
- 从左到右遍历到index
- 从右到左遍历到index
其实一开始不容易想到,为什么这么做,跟着别人的代码实现一遍的时候才能感觉到。
找到最大值以后,从左向右或者从右向左都是只需和当前最大值比较。
实现
class Solution {
public:
int trap(vector<int>& height) {
if (height.size() == 0)
return 0;
int max = 0,index = 0;
for (int i = 0; i < height.size(); i++)
{
if (height[i] > max)
{
max = height[i];
index = i;
}
}
int level = height[0];
int waterNum = 0;
for (int i = 0; i < index; i++)
{
if (level < height[i])
level = height[i];
waterNum += (level - height[i]);
}
level = height[height.size() - 1];
for (int j = height.size() - 1; j > index; j--)
{
if (level < height[j])
level = height[j];
waterNum += (level - height[j]);
}
return waterNum;
}
};