A group of two or more people wants to meet and minimize the total travel distance. You are given a 2D grid of values 0 or 1, where each 1 marks the home of someone in the group. The distance is calculated using Manhattan Distance, where distance(p1, p2) = |p2.x - p1.x| + |p2.y - p1.y|.
Example
Example 1:
Input:
[[1,0,0,0,1],[0,0,0,0,0],[0,0,1,0,0]]
Output:
6
Explanation:
The point `(0,2)` is an ideal meeting point, as the total travel distance of `2 + 2 + 2 = 6` is minimal. So return `6`.
// BFS approach will TLE
public class Solution {
public int minTotalDistance(int[][] grid) {
ArrayList<Integer> row = new ArrayList<>();
ArrayList<Integer> col = new ArrayList<>();
for (int i = 0; i < grid.length; i++)
for (int j = 0; j < grid[0].length; j++)
if (grid[i][j] == 1) {
row.add(i);
col.add(j);
}
Collections.sort(row);
Collections.sort(col);
int size = row.size();
// Min sum distance point is always median
int x = row.get(size / 2);
int y = col.get(size / 2);
int dist = 0;
for (int i = 0; i < grid.length; i++)
for (int j = 0; j < grid[0].length; j++)
if (grid[i][j] == 1)
dist += Math.abs(x - i) + Math.abs(y - j);
return dist;
}
}