码迷,mamicode.com
首页 > 移动开发 > 详细

453. 最小移动次数使数组元素相等

时间:2019-01-11 12:13:49      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:i++   highlight   move   +=   res   最小   思路   public   sum   

给定一个长度为 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;
    }
}

  

453. 最小移动次数使数组元素相等

标签:i++   highlight   move   +=   res   最小   思路   public   sum   

原文地址:https://www.cnblogs.com/airycode/p/10254385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!