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

 

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