zoukankan      html  css  js  c++  java
  • 453. 最小移动次数使数组元素相等

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

      

  • 相关阅读:
    UVa 1605
    UVa 120
    UVa 10384
    UVa 11694
    UVa 11846
    常用小函数
    【DP】:CF #319 (Div. 2) B. Modulo Sum
    类的无参方法
    类和对象
    七言
  • 原文地址:https://www.cnblogs.com/airycode/p/10254385.html
Copyright © 2011-2022 走看看