题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个数组,求其中所有数值,各与其相同数值下标之差的绝对值之和。

思路分享

  • 有关距离和的基本思路,可以查看 【Leetcode Daily】1685有序数组中差绝对值之和

  • 本题是求下标之差,所以先要把数值分类,将各自的下标整理成各个数组,然后各数组就能计算其中元素与其它元素的距离和,从而提交答案。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def distance(self, nums: List[int]) -> List[int]:
groups = defaultdict(list)
for i, x in enumerate(nums):
groups[x].append(i)
ans = [0]*len(nums)
for a in groups.values():
n = len(a)
s = list(accumulate(a, initial=0))
for j, target in enumerate(a):
left = target * j - s[j]
right = s[n]-s[j] - target*(n-j)
ans[target] = left + right
return ans