296. Best Meeting Point
求到所有点距离和最小的点。由于是麦哈顿距离,横坐标和纵坐标计算是独立的,于是问题转化为找一维数轴上到所有点距离和最小的点。
这个问题是老生常谈的问题了,如果是点的个数是奇数,答案就是中位数;如果是偶数,则最内侧两个点中间所有的数都可以是答案。两种情况都可以用 nums[nums.size()/2] 来求解。
class Solution { public: int minTotalDistance(vector<vector<int>>& grid) { vector<int> is,js; for (int i=0;i<grid.size();++i){ for (int j=0;j<grid[0].size();++j){ if (grid[i][j]){ is.push_back(i); js.push_back(j); } } } sort(js.begin(),js.end()); int i_med = is[is.size()/2]; int j_med = js[is.size()/2]; int res=0; for (int i:is) res+=abs(i-i_med); for (int j:js) res+=abs(j-j_med); return res; } };
代码中is数组由于生成时就是有序的,因此不需要排序。当然也可以有序生成js,可以降低时间复杂度。

浙公网安备 33010602011771号