题目在这: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
-
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)