我正在尝试解决编程挑战,但我的解决方案效率不高,我正在寻求建议或建议,以改善我的算法。
谜题如下:
给定一个单元格网格,表示果园,每个单元格可以是空位(0)或果树(1)。农民希望知道果园中有多少空位距离所有果树的距离在k范围内。
使用曼哈顿几何计算距离,例如:
使用极端节点方法,即使右下角的空白位置距离中间的树有5个单位的距离,也会被计算在内。
有没有人能指点我一个更有效的方法?我还很陌生这类问题,所以很难看到我应该采取的下一步。
谜题如下:
给定一个单元格网格,表示果园,每个单元格可以是空位(0)或果树(1)。农民希望知道果园中有多少空位距离所有果树的距离在k范围内。
使用曼哈顿几何计算距离,例如:
k = 1
[1, 0]
[0, 0]
the answer is 2 as only the bottom right spot is >k distance from all trees.
我的解决方案大致如下:
- 循环遍历网格并存储所有树的位置
- 从第一个树的位置开始进行BFS,并存储所有空位,直到我们到达距离超过k的邻居
- 从下一个树的位置开始进行BFS,并存储空位的交集
- 重复步骤3,直到我们遍历完所有树的位置
- 返回所有交集后剩余的空位数目
我发现对于具有大值k的大网格,我的算法变得非常缓慢,因为我最终会多次检查网格中的每个位置。经过一些研究,我发现了一些类似问题的解决方案,建议选择两个最极端的目标节点,然后仅比较与它们的距离:
- https://www.codingninjas.com/codestudio/problem-details/count-nodes-within-k-distance_992849
- https://www.geeksforgeeks.org/count-nodes-within-k-distance-from-all-nodes-in-a-set/
k = 4
[0, 0, 0, 1]
[0, 1, 0, 0]
[0, 0, 0, 0]
[1, 0, 0, 0]
[0, 0, 0, 0]
使用极端节点方法,即使右下角的空白位置距离中间的树有5个单位的距离,也会被计算在内。
有没有人能指点我一个更有效的方法?我还很陌生这类问题,所以很难看到我应该采取的下一步。