Problem
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|
.
For example, given three people living at (0,0)
, (0,4)
, and (2,2)
:
1 - 0 - 0 - 0 - 1 | | | | | 0 - 0 - 0 - 0 - 0 | | | | | 0 - 0 - 1 - 0 - 0
The point (0,2)
is an ideal meeting point, as the total travel distance of 2+2+2=6 is minimal. So return 6
Solution
如果是一维的,那就是以最中间的那个点为见面地点(
buggy : 不是坐标的平均值)
class Solution {
public:
int minTotalDistance(vector<vector<int>>& grid) {
vector<int> iArr, jArr;
int iSum = 0, jSum = 0;
for( int i = 0; i < grid.size(); i++){
for( int j = 0; j < grid[0].size(); j++){
if(grid[i][j] == 1){
iArr.push_back(i);
jArr.push_back(j);
iSum += i;
jSum += j;
}
}
}
const int N = iArr.size();
sort( jArr.begin(), jArr.end());
int iMid = iArr[N/2], jMid = jArr[N/2], rst = 0;
for( int i = 0; i < N; i++){
rst += abs( iArr[i] - iMid) + abs( jArr[i] - jMid);
}
return rst;
}
};