Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.
Example:
Input: [1,2,3] Output: 3 Explanation: Only three moves are needed (remember each move increments two elements): [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
题意:给定一个有n个正整数的数组。并定义一次移动为:取数组中n-1个元素每个加1。问,至少经过多少次这样的“移动”后,可以使数组中的所有元素相等?写出一个函数,根据给定的数组,返回最少移动的次数。
思路:每一次移动可以被定义为取n-1个元素每个加一;反之,我们也可以把一次移动定义为取一个元素,对其进行减一操作。那么,所需要的次数,等于把所有的元素的值都减为原先数组中最小元素min所需的次数。即为 sum - min * n。
有了这个思路,写代码就十分简单了。具体的java代码见下面:
public class Solution {
public int minMoves(int[] nums) {
int len = nums.length;
int sum = 0;
int min = nums[0];
for (int i=0; i