2121. Intervals Between Identical Elements (Medium) - TengnanYao/daily_leetcode GitHub Wiki

class Solution:
    def getDistances(self, arr: List[int]) -> List[int]:
        h = defaultdict(list)
        s = defaultdict(int)
        pre = defaultdict(int)
        for i, num in enumerate(arr):
            if num not in h:
                h[num].append(0)
                pre[num] = 0
            h[num].append(i)
            s[num] += i
        result = [0] * len(arr)
        for i, num in enumerate(arr):
            diff = h[num][pre[num] + 1] - h[num][pre[num]]
            s[num] -= (len(h[num]) - 1 - pre[num]) * diff
            s[num] += pre[num] * diff
            pre[num] += 1
            result[i] = s[num]
        return result