leetcode042:Trapping Rain Water
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-08-13 08:11:56 閱讀次數(shù):3363次
問(wèn)題描寫(xiě)
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!
問(wèn)題分析
這道題目解題思路可以參考leetcode011:Container With Most Water 的分析,leetcode011是求圍住的最大面積,這里有所區(qū)分,統(tǒng)計(jì)“裝水”面積,還是從兩邊向中間掃描,時(shí)間復(fù)雜度O(n)。 這里設(shè)置1個(gè)水平面h,表示當(dāng)前圍住的高度,如果后續(xù)掃面到的比h低,說(shuō)明可以裝水,統(tǒng)計(jì);如果比h高,更新h便可。
代碼
//運(yùn)行時(shí)間:13ms
class Solution {
public:
int trap(vector<int>& height) {
int i = 0, j = height.size()⑴;
int ans = 0;
int h = 0;
while (j-i >= 0){
if (height[i] > height[j]){
if (height[j] <= h){
ans += (h - height[j]);
}
else{
h = height[j];
}
j--;
}
else if (height[i] < height[j]){
if (height[i] <= h){
ans += (h - height[i]);
i++;
}
else{
h = height[i];
}
}
else{
if (height[i] <= h){
if (i != j)
ans += 2 * (h - height[i]);
else
ans += (h - height[i]);
}
else{
h = height[i];
}
i++; j--;
}
}
return ans;
}
};
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)