給定M * N
格子和兩個球員的位置p1
和p2
上網。網格上有不同位置放置n個球。讓這些球的位置是B(1), B(2), B(3) ..., B(n)
。
我們需要計算最小曼哈頓距離需要挑選所有的球。球應按升序挑選,即B(i)
在B(j)
之前選擇,如果i < j
。
考慮下面的示例情形:
p1 = (1, 1) p2 = (3, 4)
讓我們考慮球的位置作爲 B(1) = (1, 1), B(2) = (2, 1), B(3) = (3, 1), B(4) = (5, 5)
輸出將5
因爲p1
會先選擇B(1), B(2), B(3)
和p1
會選擇B(4)
雙人格子穿越遊戲
我的做法我做了貪心方法以及從給定的球B(i)
(從i = 1 to n
開始)計算的距離p1
和p2
,並將最小值添加到輸出並相應地更新玩家的位置。
但是這種方法在很多測試用例上都失敗了。
P.S:在我過去的採訪中提到了這個問題,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)
和p2
將選擇B(1), B(3), B(5)
輸出將8. p1 = (1,1) p2 = (3,4)
B(1) = (2, 2), B(2) = (3, 2), B(3) = (4, 2), B(4) = (1, 1)
在這種情況下,p1
將會選擇OSE B(4)
和p2
會選擇B(1), B(2), B(3)
輸出將5
注:當玩家選擇一個球,他移動到該點。
P.P.S.經過討論,我相信沒有線性時間解決方案存在到這個問題和O(n^2)解決方案是最好的解決方案。
也許你應該看看[這裏](http://stackoverflow.com/questions:一旦完成,我們有一個球員或其他,
M[0][N]
或M[0][N+1]
開始選擇/ 10402087 /算法換最小曼哈頓距離)。 – theVoid我看了這個。我認爲這兩個問題是不同的,因爲在這個問題中,我們試圖將一組點分成兩個不同的集合,使得一個集合中元素的距離遠離另一個集合中的元素@theVoid –
我沒有建議重複在這裏,我只是給你提供了一個我認爲可以證明對你有用的鏈接。 – theVoid