📌  相关文章
📜  使用给定操作使所有数组元素相等的最低成本(1)

📅  最后修改于: 2023-12-03 15:36:41.381000             🧑  作者: Mango

使用给定操作使所有数组元素相等的最低成本

问题描述

给出一个长度为n的数组,每次可以选择将其中一个元素加1或减1,求最少需要多少次操作才能使数组中所有元素相等。

解题思路
  • 对于每个元素x,将其与数组中所有其他元素的差值的和求出来,可以得到一个代价sum_x;
  • 将所有元素的代价求和,就是将所有元素变成相等的值需要的最小代价sum;
  • 因为每次操作只能对一个元素执行加1或减1,所以在使得所有元素相等的过程中,每个元素只能被增加或减少1;
  • 假设当前所有元素的平均值为avg,那么假设将当前元素x提高到avg,则对于x而言,其代价sum_x就会减少(x-avg)*n,因为减少了x到其他元素之间的差距;
  • 由此可以得到最终的算法:
def min_cost(nums):
    n = len(nums)
    avg = sum(nums)/n
    cost = 0
    for num in nums:
        cost += abs(num - avg)
    return cost
测试样例
输入样例1
[1,2,3]
输出样例1
2
输入样例2
[1,2,4]
输出样例2
3