在Python中查找已排序数组的绝对差之和
假设我们有一个已按非递减顺序排序的数组nums。我们必须制作一个名为result的与nums相同长度的数组,result [i]是nums [i]与数组中所有其他元素的绝对差的总和。
因此,如果输入的是nums = [5,7,12],则输出将是[9,7,12],因为
- |5-5| + |5-7| + |5-12| = 0 + 2 + 7 = 9
- |7-5| + |7-7| + |7-12| = 2 + 0 + 5 = 7
- |5-12| + |7-12| + |12-12| = 7 + 5 + 0 = 12
要解决这个问题,我们将遵循以下步骤-
- res:一个新列表
- s:0
- n:nums的大小
- 对于i在1到n-1的范围内,执行以下操作
- s:= s + nums [i] – nums [0]
- 在res末尾插入s
- 对于i在1到n-1的范围内,执行以下操作
- diff:=nums [i] – nums [i-1]
- s:= s + diff *i
- s:= s – diff *(n-i)
- 在res末尾插入s
- 返回res
例子
让我们看以下实现,以更好地了解-
def solve(nums):
res = []
s = 0
n = len(nums)
for i in range(1, n):
s += nums[i] - nums[0]
res.append(s)
for i in range(1, n):
diff = nums[i] - nums[i-1]
s += diff * i
s -= diff * (n-i)
res.append(s)
return res
nums = [5,7,12]
print(solve(nums))
输入
[5,7,12]
产量
[9, 7, 12]