453. Minimum Moves to Equal Array Elements

来源:互联网 发布:qpst有端口不显示手机 编辑:程序博客网 时间:2024/06/03 23:42

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:3Explanation: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.

假设共增加m次使得数组内所有数字都为x,原数组最小值为min,原数组所有数字加和为sum。

那么 sum+m*(n-1)*1=x*n

                             原加和+增加1的数量=现最大值*数组个数

其中m为要求的参数,x为未知的最大值,但是x=min+m最小值变最大值需要的次数就是m次

因此原式进化               sum+m*(n-1)*1=(min+m)*n

简化m=sum-min*n

另外一种思考方式:P(若每次增加n-1个数字+1直到所有数字相等),非P(每次让1个最大数字-1直到所有数字相等)

                                 那么sum=m*1+min*n     原数组加和=现运行次数减去的1+最小值*数组个数

public class Solution {    public int minMoves(int[] nums) {        Arrays.sort(nums);        int sum=0;        for(Integer i:nums){            sum+=i;        }        return sum-nums[0]*nums.length;    }}





原创粉丝点击