昨晚梦到我回家了,在家乡的路上拍照片,心里想拍下来出来以后就能看看照片了。二月离开家以来已经半年多没回家了,因为疫情的影响太原——石家庄的列车也停运了好多,其中就包括途径我们家的一趟列车,让回家的路变得异常艰难,希望可以尽快恢复。
第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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处