python 两个数组是否相等_第86天——第86题(最小移动次数使数组元素相等)

昨晚梦到我回家了,在家乡的路上拍照片,心里想拍下来出来以后就能看看照片了。二月离开家以来已经半年多没回家了,因为疫情的影响太原——石家庄的列车也停运了好多,其中就包括途径我们家的一趟列车,让回家的路变得异常艰难,希望可以尽快恢复。

第86天——第86题(最小移动次数使数组元素相等

看题目!

给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动将会使 n - 1 个元素增加 1。

示例:

输入:
[1,2,3]
输出:
3
解释:
只需要3次移动(注意每次移动会增加两个元素的值):
[1,2,3]  =>  [2,3,3]  =>  [3,4,3]  =>  [4,4,4]

Python解答:

class Solution:
    def minMoves(self, nums: List[int]) -> int:
         return sum(nums) - len(nums) * min(nums)

题目解析:

今天的代码一行解决,但把他当做一个数学题目来解答:

假设目前数组总和为sum,我们需要移动次数为m,那么整体数组总和将会增加m * (n - 1),这里的n为数组长度,最后数组所有元素都相等为x,于是有:

sum + m * (n - 1) = x * n _______(1)

我们再设数组最小的元素为min_val,m = x - min_val​,即 ​x = m + min_val​带入(1)得:

m = sum - min_val * n​

作者:powcai 链接:力扣 来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值