题目描述:
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:
Input: 1 - 0 - 0 - 0 - 1 | | | | | 0 - 0 - 0 - 0 - 0 | | | | | 0 - 0 - 1 - 0 - 0 Output: 6 Explanation: Given three people living at (0,0), (0,4), and (2,2): The point (0,2) is an ideal meeting point, as the total travel distance of 2+2+2=6 is minimal. So return 6.
class Solution {
public:
int minTotalDistance(vector<vector<int>>& grid) {
if(grid.size()==0||grid[0].size()==0) return 0;
int m=grid.size();
int n=grid[0].size();
vector<int> row;
vector<int> col;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(grid[i][j]==1)
{
row.push_back(i);
col.push_back(j);
}
}
}
sort(row.begin(),row.end());
sort(col.begin(),col.end());
int row_mid=row[row.size()/2];
int col_mid=col[col.size()/2];
int result=0;
for(auto x:row) result+=abs(row_mid-x);
for(auto y:col) result+=abs(col_mid-y);
return result;
}
};
本文介绍了一种算法,用于找到二维网格中使所有参与者旅行距离之和最小的会议点。通过将问题转化为求解中位数位置,该算法有效地解决了最小化总曼哈顿距离的问题。
4667

被折叠的 条评论
为什么被折叠?



