Leetcode: 296. Best Meeting Point
Problem Statement
from typing import List
class Solution:
def minTotalDistance(self, g: List[List[int]]) -> int:
N = len(g)
M = len(g[0])
cfreq = [0] * M
rfreq = [0] * N
for i in range(N):
for j in range(M):
cfreq[j] += g[i][j]
rfreq[i] += g[i][j]
x = float("inf")
for j in range(M):
cur = 0
for k in range(M):
if j != k:
cur += cfreq[k] * abs(k - j)
x = min(x, cur)
y = float("inf")
for i in range(N):
cur = 0
for k in range(N):
if i != k:
cur += rfreq[k] * abs(k - i)
y = min(y, cur)
return x + y
assert (
Solution().minTotalDistance([[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0]])
== 6
)
assert Solution().minTotalDistance([[1, 1]]) == 1