题目在这:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/
思路分析:
这是一道数学推理题。
我们假设数组中有N个数,其中最小的数为min。数组所有数据的和为sum。需要操作k次将所有的数变成一样的数,设这个数为target。
则可以得到一个关系式: k(n-1) + sum = target *n
。
这个关系中,我们只需要知道target既能求出来k的值。
那么target是多少呢~ 答案是 k+min
。
其实我们举几个例子就能发现这个答案, 比如 [1,2,3]
操作三次变成最后都是4。
[2,4,5] 操作5次 变为都是7。
所以将 target = min +k。带入到上面的关系式。
k(n-1) + sum = target *n
。 (target = min +k)k(n-1) + sum = (min +k) *n
kn-k+sum = kn+n*min
sum-k-n*min=0
k = sum-min*n
完整代码:
class Solution:
def minMoves(self, nums: List[int]) -> int:
return sum(nums) - min(nums) * len(nums)