Given a M * N
两名玩家的网格和位置p1
and p2
在网格上。有 n 个球放置在网格上的不同位置。设这些球的位置为B(1), B(2), B(3) ..., B(n)
.
我们需要计算曼哈顿最短距离需要挑选所有的球。应按升序挑选球,即如果B(i)
之前被挑选过B(j)
if i < j
.
考虑以下示例案例:
p1 = (1, 1)
p2 = (3, 4)
让我们将球的位置考虑为B(1) = (1, 1), B(2) = (2, 1), B(3) = (3, 1), B(4) = (5, 5)
Output将5
因为p1
会首先选择B(1), B(2), B(3)
and p1
会选择B(4)
我的方法
我做了一个greedy approach和计算出的距离p1
and p2
从给定的球B(i)
(从...开始i = 1 to n
)并将最小值添加到输出中并相应地更新玩家的位置。
但这种方法对于很多测试用例来说都失败了。
PS:这个问题是在我过去的一次采访中被问到的O(n)
这一问题的解决有望得到解决。
编辑:更多测试用例可以是这样的
p1 = (1,1) p2 = (3,5)
B(1) = (3, 3), B(2) = (1, 1), B(3) = (4, 5), B(4) = (2, 1), B(5) = (4, 3).
在这种情况下p1
会选择B(2), B(4)
and p2
会选择B(1), B(3), B(5)
Output将会是8。
p1 = (1,1) p2 = (3,4)
B(1) = (2, 2), B(2) = (3, 2), B(3) = (4, 2), B(4) = (1, 1)
在这种情况下p1
会选择B(4)
and p2
会选择B(1), B(2), B(3)
Output将是 5。
Note: 当玩家选择一个球时,他会移动到该点.
附言经过讨论我相信不存在线性时间解对于这个问题和O(n^2) 解决方案是可用的最佳解决方案。