如数组 int height[] = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1};
对应积水如下图:
图转自:https://blog.csdn.net/Thomas0713/article/details/83051990
如果要形成积水,则积水两旁的台阶上高于积水区的。而积水体积计算则是最低台阶与两边台阶最低的差。
代码:
#include <iostream>
int getArea(int height[], int size)
{
if (size < 3)
{
return 0;
}
int i = 0;
int j = size - 1;
int maxLeft = height[i];
int maxRight = height[j];
int sum = 0;
while (i <= j)
{
if (maxLeft < maxRight)
{
if (maxLeft < height[i])
{
maxLeft = height[i];
std::cout << "maxLeft:" << height[i] << std::endl;
}
else if (maxLeft > height[i])
{
sum += (maxLeft - height[i]);
std::cout << "left:" << height[i] << std::endl;
}
++i;
}
else
{
if (maxRight < height[j])
{
maxRight = height[j];
std::cout << "maxRight:" << height[j] << std::endl;
}
else if (maxRight > height[j])
{
sum += (maxRight - height[j]);
std::cout << "right:" << height[j] << std::endl;
}
--j;
}
}
return sum;
}
int main()
{
int height[] = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1};
std::cout << getArea(height, sizeof(height) / sizeof(int)) << std::endl;
return 0;
}