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

(Java) LeetCode 453. Minimum Moves to Equal Array Elements —— 最小移动次数使数组元素相等

时间:2018-08-07 21:58:57      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:xpl   最小数   tput   次数   style   推理   red   数组   就是   

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;
    }
}

 

(Java) LeetCode 453. Minimum Moves to Equal Array Elements —— 最小移动次数使数组元素相等

标签:xpl   最小数   tput   次数   style   推理   red   数组   就是   

原文地址:https://www.cnblogs.com/tengdai/p/9439615.html

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