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