问题:
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 incrementingn - 1 elements by 1.
给定一个长度为n的非空整型数组,定义move动作,一次move使得数组中的n-1个元素的值增加1,找到使得每个元素值相等的最小move次数。
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]
分析:
记初始状态下数组元素和为sum,最小元素值为min,最终状态每个元素的值均为x,达到最终状态所需的move次数为m。则:
1. sum + m * (n-1) = x * n;
2. x = min + m;
综上,m = sum - min * n
x = min + m 解释:
假设初试状态下,数组如下所示,min, sub-max, max均表示当前状态下的最小值,次大值,最大值:
【min, ..., sub-max , ... , max】
假设进行一次不包括min的move,那么数组状态仍然如上所示,
【min, ..., sub-max , ... , max】,min与上个状态值相同,其余均值加1。问题并没有得到进展,甚至比初始状态更加恶劣,最小值与最大值的差增加了!
所以如果答案中若出现一个不包括min的move,那么该答案一定可以化简,即减少move的次数。