leetcode042:Trapping Rain Water
來源:程序員人生 發布時間:2015-08-13 08:11:56 閱讀次數:3371次
問題描寫
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!
問題分析
這道題目解題思路可以參考leetcode011:Container With Most Water 的分析,leetcode011是求圍住的最大面積,這里有所區分,統計“裝水”面積,還是從兩邊向中間掃描,時間復雜度O(n)。 這里設置1個水平面h,表示當前圍住的高度,如果后續掃面到的比h低,說明可以裝水,統計;如果比h高,更新h便可。
代碼
//運行時間: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;
}
};
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈