我最近在一次采访中被问到这个问题,我不知道如何实施它。我希望有人能为我指出如何解决这个问题的正确方向。
问题陈述:给定一个二维整数数组,找出可以容纳的总水量。这些数字表示地图中的高程(即山的高度)。水从最高的山流到山谷(从最高的高度到最低的高度)。
示例1:这是一个5 x 3的矩阵。10是最高峰。您可以假设水向下流动,并开始在坐标处的瓷砖2处收集。这块瓷砖将收集7单位的水。在坐标(2,0)或(3,0)处溢出至高度为9的相邻瓷砖并流入大海之前(假设边缘被大海包围)。所以这张地图收集的总水量是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
在这种情况下,水可以收集在以下坐标中:
总容量为14 4=18。
我试图用洪水填充来解决这个问题。通过找到从最高峰到最低点的路径,并使用该路径确定可以存储在最低高度的水。我不确定我是否走上了正确的道路。对如何解决这个问题有什么想法吗?
你在洪水泛滥的正确道路上。这里有一种解决问题的方法。
首先,将所有边缘瓷砖标记为已完成。
然后创建内部平铺的排序列表,首先是最下面的平铺。
对列表中的每个磁贴执行整体填充,以
然后增加山谷瓦片的水平以匹配出口瓦片的水平。如果出口瓦片完成,那么所有的山谷瓦片现在都完成了。否则,扩展山谷以包括出口瓦片。
下面是算法如何与问题中的第二个示例一起工作。最初,边缘图块完成,而内部图块没有完成。
假设右上角的2是第一个。出口瓷砖为3。因此,将2增加到3,将1添加到总水量中。然后3s可以增加到4,总水量增加3。4号完成了,所以山谷现在完成了。
接下来是左下角的2之一。洪水填充会找到两个山谷瓦片,出口瓦片是9。所以我们可以在两个瓦片上添加7,在总水量上添加14。其中一个出口完成了,所以山谷现在完成了。
在这一点上,每个剩余的瓷砖都与同等或更低的出口瓷砖相邻,并且也已完成。因此,所有剩余的瓷砖都标记为完工。总水量为1 3 14=18。
我想创建一个由任意高度的正方形组成的高度场贴图。给定一个NxN数组,我想要每一个大小为MxM的正方形,其中M 0.2, 0.2, 0.6, 0.6, 0.1, 0.1, 0.2, 0.2, 0.6, 0.6, 0.1, 0.1, 0.5, 0.5, 0.3, 0.3, 0.8, 0.8, 0.5, 0.5, 0.3, 0.3, 0.8, 0.8, 0.6, 0.6, 0.4, 0.4, 0.9,
我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]
为什么上面的代码不起作用,我应该如何纠正?
我正在编写一个代码,它是一个让用户根据他们单击的位置在屏幕上创建圆圈的程序。我尝试的是在第一个事件处理程序中放置createnew cle方法,但它所做的只是给我带来问题。到目前为止,我正在尝试以不同的方式处理问题。我现在使用ArrayList将所有形状组合在一起并将它们显示在窗格上。但是当我运行代码时,圆圈不会显示。 这是我的代码:
问题内容: 我想获取所有列的总和,但是我不断收到出站异常。这是我得到的输出: 问题答案: 您的外部for循环条件给您带来了问题。这是您的循环:- 现在,当达到该值时,您正在尝试访问。这将引发异常。 由于每个内部数组的大小都相同,因此可以 将循环更改为 :- 或者,甚至更好的是,只需事先存储一些变量。但这并没有太大的区别。 我还建议您使用更好的方法来计算列的总和。避免首先迭代行。保持迭代正常,大概是
问题内容: 我试图创建此代码以输入m x n矩阵。我打算输入,但是代码产生了。当我输入其他m×n矩阵时,也会发生相同的情况,代码会产生行数相同的m×n矩阵。 也许您可以帮助我找到我的代码有什么问题。 问题答案: 问题出在初始化步骤上。 这段代码实际上使您的每一行都引用相同的对象。如果任何列中的任何项目发生更改-其他所有列都将发生变化: 您可以在嵌套循环中初始化矩阵,如下所示: 或者,通过使用列表理