题目链接: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)思路:刚开始看到这个题目还觉得很难理解,不太明白题目要表达的意思,不过结合图表后就容易明白了。我的思路就是先找到数组里最大的数字,然后从头尾分别向最大元素靠近,因为这样只要分别逼近时前一个元素比后一个元素大就满足,把差值给结果,然后再把差值加到后一个元素上,继续和下一个比较。前后分别逼近结束后就得到了答案。
(2)代码:
int trap(int* height, int heightSize) {
int max = height[0];
int maxnum = 0;
int ans = 0;
for(int i = 0; i < heightSize; i++) {
if(height[i] > max) {
max = height[i];
maxnum = i;
}
}
for(int j = 0; j < maxnum; j++) {
if(height[j] > height[j+1]) {
ans += height[j] - height[j+1];
height[j+1] += height[j] - height[j+1];
}
}
for(int k = heightSize - 1; k > maxnum; k--){
if(height[k] > height[k-1]) {
ans += height[k] - height[k-1];
height[k-1] += height[k] - height[k-1];
}
}
return ans;
}