一、思路:
左邊最高和右邊最高求一個最小值減去當前高度,就等於當前能裝的水的量
二、代碼:
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;
}
};