You are given a 0-indexed integer array nums. There exists an array arr of length nums.length, where arr[i] is the sum of |i - j| over all j such that nums[j] == nums[i] and j != i. If there is no such j, set arr[i] to be 0.
Return the array arr.
Β
Example 1:
Input: nums = [1,3,1,1,2]
Output: [5,0,3,4,0]
Explanation:
When i = 0, nums[0] == nums[2] and nums[0] == nums[3]. Therefore, arr[0] = |0 - 2| + |0 - 3| = 5.
When i = 1, arr[1] = 0 because there is no other index with value 3.
When i = 2, nums[2] == nums[0] and nums[2] == nums[3]. Therefore, arr[2] = |2 - 0| + |2 - 3| = 3.
When i = 3, nums[3] == nums[0] and nums[3] == nums[2]. Therefore, arr[3] = |3 - 0| + |3 - 2| = 4.
When i = 4, arr[4] = 0 because there is no other index with value 2.
Example 2:
Input: nums = [0,5,3]
Output: [0,0,0]
Explanation: Since each element in nums is distinct, arr[i] = 0 for all i.
First, use a hash map \(d\) to record the list of indices for each element in the array \(nums\), that is, \(d[x]\) represents the list of all indices in \(nums\) where the value is \(x\).
For each list of indices \(idx\) in the hash map \(d\), we can calculate the value of \(arr[i]\) for each index \(i\) in \(idx\). For the first index \(idx[0]\), the sum of distances to all indices on the right is \(right = \sum_{i=0}^{m-1} - idx[0] \times m\). Then, we iterate through \(idx\), and for each iteration, compute \(ans[idx[i]] = left + right\), then update \(left\) and \(right\) as follows: \(left = left + (idx[i+1] - idx[i]) \times (i+1)\), and \(right = right - (idx[i+1] - idx[i]) \times (m-i-1)\).
After the iteration, we obtain the array \(arr\) corresponding to each element in \(nums\), which is stored in \(ans\).
The time complexity is \(O(n)\) and the space complexity is \(O(n)\), where \(n\) is the length of the array \(nums\).