lintcode 郵局的建立

2021-09-12 13:15:38 字數 620 閱讀 2822

給出乙個二維的網格,每乙個格仔上用 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 

}vectordish(m, int_max/2);

vectordisv(n, int_max/2);

for (int i = 0; i < m; i++) }}

for (int i = 0; i < n; i++) }}

int res = int_max;

for (int i = 0; i < n; i++)

}return res;

}};

平面上的郵局

問題描述 在乙個平面上有n 1 n 100000 個村莊,每個村莊通過座標 xi,yi 標示位置,10 9 xi,yi 10 9。現在想要建乙個郵局,使得到各個村莊的距離之和最短。在這個問題中,距離定義為曼哈頓距離,即點i和點j的距離等於 xi xj yi yj 輸入第一行為n,表示村莊的數量 接下...

LINTCODE 建立最大數

lintcode 建立最大數 思路 把這個問題分成兩個子問題 首先,求在陣列中nums取k個數所能組成的最大數 然後,把兩個陣列,nums1,nums2合併所能組成的最大數 前提都是數字相對位置不變 ps c 若已知nums1,nums2,則兩個陣列的大小可以直接用 等運算子來判斷,這個和字串一樣,...

建立最大數 LintCode

給出兩個長度分別是m和n的陣列來表示兩個大整數,陣列的每個元素都是數字0 9。從這兩個陣列當中選出k個數字來建立乙個最大數,其中k滿足k m n。選出來的數字在建立的最大數裡面的位置必須和在原陣列內的相對位置一致。返回k個數的陣列。你應該盡可能的去優化演算法的時間複雜度和空間複雜度。樣例 給出 nu...