描述
给出一个二维的网格,每一个格子上用 1 表示房子,0 表示空。要求在网格中,找到一个空地建立邮局,使得邮局到所有的房子的距离和最小。返回所有房子到邮局的最小距离和,如果不可能建邮局则返回-1。
样例
给出一个网格
0 1 0 0
1 0 1 1
0 1 0 0
返回 6 (把邮局设立在(1,1)这个位置时,邮局离所有的房子的距离是最近的)。
思考
可以抽象为一个垂直方向和一个水平方向的房子数量。用数组hor和ver表示,然后再维护一个数组来保存邮局建立之后两个抽象方向的距离。最后再根据grid的值,判断是否可以建立邮局,返回最小值。
复杂度为O(max(m,n)^2)
代码
class Solution {
public:
/**
* @param grid: a 2D grid
* @return: An integer
*/
int shortestDistance(vector<vector<int>> &grid) {
// write your code here
int n = grid.size();
int m = grid[0].size();
vector<int> ver(n, 0);
vector<int> hor(m, 0);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j+&#