https://leetcode.com/problems/best-meeting-point/
因為是曼哈頓距離,所以直接壓縮成一維的問題。
一維的grid里,最佳點是中間的點,如果為奇數則為中點,偶數則為中點中的任意一個。
class Solution {
public:
int minTotalDistance(vector<vector<int>>& grid) {
int m = grid.size();
if(m == 0) return 0;
int n = grid[0].size();
if(n == 0) return 0;
vector<int> y;
vector<int> x;
//init
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(grid[i][j] == 1) {
x.push_back(j);
y.push_back(i);
}
}
}
//find median
sort(x.begin(),x.end());
sort(y.begin(),y.end());
int num = x.size();
int mx = x[num/2];
int my = y[num/2];
//calculate distance
int res = 0;
for(int i = 0; i < num; i++) {
int d = abs(x[i] - mx) + abs(y[i] - my);
res += d;
}
return res;
}
};