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)
发布了77 篇原创文章 · 获赞 9 · 访问量 6745

猜你喜欢

转载自blog.csdn.net/u013075024/article/details/96605949
今日推荐