Best Position for a Service Centre LeetCode solution in Python
1class Solution:2def getMinDistSum(self, positions: List[List[int]]) -> float:3n = len(positions)4if n == 1:5return 067def gradient(x, y):8ans = [0, 0]9for i in range(n):10denom = math.sqrt(11pow(x - positions[i][0], 2) + pow(y - positions[i][1], 2)12)13ans[0] += (x - positions[i][0]) / denom if denom else 014ans[1] += (y - positions[i][1]) / denom if denom else 015return ans1617def fn(x, y):18res = 019for i in range(n):20res += math.sqrt(21pow(x - positions[i][0], 2) + pow(y - positions[i][1], 2)22)23return res2425x = sum(x for x, _ in positions) / n26y = sum(y for _, y in positions) / n27lr = 128while lr > 1e-7:29dx, dy = gradient(x, y)30x -= lr * dx31y -= lr * dy32lr *= 0.99733if not dx and not dy:34lr /= 235return fn(x, y)