解题思路
这道题应用动态规划思想是比较巧妙的,大问题是找所有点向左右最低点看齐的差量集合,小问题是找每一个点左右边最高点的较低点。
int Size = height.size();
if (Size <=2)
{
return 0;
}
vector<int> dpLeft(Size);
vector<int> dpRight(Size);
dpLeft[0] = height[0];
int sum = 0;
dpRight[Size - 1] = height[Size - 1];
for (int i =1; i <Size; i++)
{
dpLeft[i] = max(dpLeft[i-1],height[i]);
}
for (int j = Size-2; j >=0; j--)
{
dpRight[j] = max(dpRight[j+1],height[j]);
sum += min(dpRight[j], dpLeft[j]) - height[j];
}
return sum;