一、思路:

    左边最高和右边最高求一个最小值减去当前高度,就等于当前能装的水的量

二、代码:

class Solution {
public:
	int getMaxRight(vector<int>& height, int index) {
		int maxRight = 0;
		for (; index < height.size(); index++) {
			if (height[index] > maxRight)
				maxRight = height[index];
		}
		return maxRight;
	}
	int trap(vector<int>& height) {
		int res = 0;
		int rightMax = getMaxRight(height, 1), leftMax = 0;
		for (int i = 0; i < height.size(); i++)
			if (rightMax < height[i])
				rightMax = height[i];
		for (int i = 0; i < height.size(); i++)
		{
			if (height[i] > leftMax)
				leftMax = height[i];
			if (height[i] == rightMax)
				rightMax = getMaxRight(height, i + 1);
			int diff = min(leftMax, rightMax) - height[i];
			res += (diff > 0 ? diff : 0);
		}
		return res;
	}
};

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐