最近在面试中被问到这个问题,但我不知道如何实现。希望有人能指点我如何解决这个问题。
问题陈述:给定一个二维整数数组,找出其中可以容纳的总水量。数组中的数字代表地图上的高程(即山的高度)。水从最高峰流到山谷(从最高处到最低处的高度)。
示例 1:这是一个 5 x 3
的矩阵。10 是最高峰。你可以假设水向下流并开始在坐标为 (3, 1)
的格子处聚集。此格将收集7个单位的水。在溢出到高度为9的相邻格子 (2, 0) 或 (3, 0)
并流入海洋之前。所以这张地图收集到的总水量是7。
9 9 9
9 10 9
9 9 9
9 2 10
10 10 10
示例 2:
9 9 9 9 9 9
9 10 9 8 2 4
9 9 9 10 3 5
9 2 2 10 3 5
10 10 10 10 9 9
在这种情况下,水可以收集在以下坐标中:
1. (3, 1) & (3, 2)。因此总容量 => 7 + 7 = 14 2. (1, 4) (2, 4) & (3, 4)。这些坐标可以分别存储2、1、1。因为它们最多能容纳4个单位的水,然后水就会从坐标(1, 5)的边缘溢出。因此总容量 => 2 + 1 + 1 = 4
总容量为14 + 4 = 18。
我尝试使用泛洪算法解决这个问题。通过找到从最高点到最低点的路径,并使用该路径确定可以储存的最低高度的水。我不确定我是否走在正确的道路上。对于如何解决这个问题有什么想法吗?