leetcode C++ 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 上面是由数组 [0,1,0,2,1,0,1,3,2,

一、思路:

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

二、代码:

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;
	}
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章