力扣 OJ 42. 接雨水

题目:

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

 

代码:

class Solution {
public:
	int getMax(vector& height, int i, int j)
	{
		int ansMax = -1, ans = -1;
		for (int k = i; k <= j; k++){
			if (ansMax < height[k]){
				ans = k, ansMax = height[k];
			}
		}
		return ans;
	}
	int getSum(vector& height, int i,int j)
	{
		int ans = 0;
		for (int k = i; k <= j; k++)ans += height[k];
		return ans;
	}
	int trap(vector& height,int i,int j) {
		if (j - i <= 1)return 0;
		int k = getMax(height, i + 1, j - 1);
		if (height[k] <= height[i] && height[k] <= height[j]){
			return min(height[i], height[j])*(j - i) + max(height[i], height[j]) - getSum(height, i, j);
		}
		return trap(height, i, k) + trap(height, k, j);
	}
	int trap(vector& height) {
		if (height.size() < 2)return 0;
		return trap(height, 0, height.size() - 1);
	}
};

 

你可能感兴趣的:(力扣 OJ 42. 接雨水)