您的位置:首页 > 移动开发

***LeetCode 42. Trapping Rain Water

2016-01-09 20:59 447 查看
https://leetcode.com/problems/trapping-rain-water/

最初思路是,用一个栈来存height,如果发现height[i] >= 栈顶 就计算一部分面积,时间复杂度似乎是O(n)

然后发现最后部分很难处理,比如 4 2 3。。然后没有过,,这个在考虑下 。。

很神奇的做法:

从两头向中间扫描,找当前的第二高的地方。然后求小面积:

题解
http://www.xuebuyuan.com/1586534.html
class Solution {
public:
int trap(vector<int>& height) {
int sech = 0, ret=0;
int left = 0, right = height.size()-1;
while ( left < right ) {
if(height[left] < height[right] ) {
sech = max( sech, height[left] );
ret += sech - height[left];
left ++;
} else {
sech = max( sech, height[right] );
ret += sech - height[right];
right --;
}
}
return ret;
}
};


Python代码:

class Solution(object):
def trap(self, height):
left = 0
sech = 0;
ret = 0
right = len(height)-1
while( left < right ) :
if height[left] < height[right]:
sech = max(sech, height[left])
ret += sech - height[left]
left += 1
else :
sech = max(sech, height[right])
ret += sech - height[right];
right -= 1

return ret


感觉思路正常的做法: 找mountain  然后两个mountain之间,min(montain)-height[i]求和

感觉这样不是很容易写,,,不过也是O(n)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: