天天看点

力扣(leetcode) 453. 最小操作次数使数组元素相等(数学推理)

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

  • ​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)