zoukankan      html  css  js  c++  java
  • (Java) LeetCode 453. Minimum Moves to Equal Array Elements —— 最小移动次数使数组元素相等

    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-1个元素+1,那么这n-1个一定是最小的n-1个,否则就会越加越多。每次都找最小的n-1个去加,直到所有的数相等。换个角度,就等于每次找到最大的那个数使得其-1,直到最大和最小的数相等。最终,所有比最小的那个数大的数,都要变成最小的数。所以,结果就是求所有数与最小数差的和。即,所有数的和与最小数与数组长度乘积的差。本题就是个逻辑推理和数学式的简化。感觉算法有的时候就是数学竞赛啊……


    Java

    class Solution {
        public int minMoves(int[] nums) {
            int min = nums[0], sum = 0;
            for (int num : nums) {
                if (num < min)
                    min = num;
                sum += num;
            }
            return sum - nums.length * min;
        }
    }
  • 相关阅读:
    @Controller 与 @RestController 的区别
    Java泛型
    Java面试被经常问到的常用算法
    jdk和jre的区别
    Spring获取对象的方式
    xsi:schemaLocation的作用
    SpringBoot学习(一)
    docker-elk装IK自定义分词库
    MySQL存储引擎
    docker环境下elasticsearch安装ik和拼音分词
  • 原文地址:https://www.cnblogs.com/tengdai/p/9439615.html
Copyright © 2011-2022 走看看