给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。
示例:
输入: [1,2,3] 输出: 3 解释: 只需要3次移动(注意每次移动会增加两个元素的值): [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
思路:
设加x次,加到最后,每个数都为y
sum:数组元素的和
min:数组中最小的元素
n:数组中元素的个数
则有:
sum+(n-1)*x = n*y(式1)
y = min+x(式2)
得:x = sum-n*min
class Solution { public int minMoves(int[] nums) { int sum = 0; int min =nums[0]; for (int i=0;i<nums.length;i++) { sum+=nums[i]; } for (int i=1;i<nums.length;i++) { min = Math.min(min,nums[i]); } return sum-nums.length*min; } }
class Solution { public int minMoves(int[] nums) { if (nums.length == 0)return 0; int min = nums[0]; for (int n:nums) { min = Math.min(min,n); } int res = 0; for (int n:nums) { res+=n-min; } return res; } }