Leetcode 453. 最小移动次数使数组元素相等 —— python

1. 题目描述

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

示例:
输入:
[1,2,3]

输出:
3

解释:
只需要3次移动(注意每次移动会增加两个元素的值):

[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements

2. 解题思路

对于有的题,在完全没有思路的情况下,通过具体的例子一步步推断,找出规律。

这题的规律如下:

  • 设至少移动X次,
  • 则最后达到平衡的那个数为min(nums) +X,
  • 平衡后的数组元素之和为N * { min (nums) + X }, 其中N表示数组元素个数
  • 移动过程中增加了X*(N - 1)

为什么移动过程增加了X(N - 1)???
例如:

 [1,2,3]  =>  [2,3,3]  =>  [3,4,3]  =>  [4,4,4]
               1 1          1 1          1    1

每移动一次,都增加N-1,所以移动过程增加了X*(N - 1)。

可得
sum[nums] + X*(N - 1) = N * { min (nums) + X }
则X = (sum[nums] - N*min (nums))

3. 代码实现

class Solution:
    def minMoves(self, nums) -> int:
        if(nums ==[] or len(nums) == 1):
            return 0
        N = len(nums)
        sumValue = sum(nums)
        minValue = min(nums)
        return  (sumValue - N*minValue)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值