给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
一层一层的找
public static int Trap2(int[] height)
{
if (height.Length < 1)
return 0;
//获取Map的宽与高
int width = height.Length;
int floor = height.Max();
int cnt = 0;
for (int i = 0; i < floor; i++)
{
if (height.Where(t => t > i).Count() < 2)
break;
//记录第一个柱子,
int IsFirst = -1;
for (int j = 0; j < width; j++)
{
//找第一个柱子
//有柱子
if (height[j] > i)
{
//找到了第二根柱子
if (IsFirst != -1)
{
cnt += j - IsFirst - 1;
}
IsFirst = j;
}
}
}
return cnt;
}