美文网首页
Leetcode 462. 最少移动次数使数组元素相等 II

Leetcode 462. 最少移动次数使数组元素相等 II

作者: 心之所向路之所往 | 来源:发表于2020-09-24 09:56 被阅读0次

    题:给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。

    例如:

    输入:

    [1,2,3]

    输出:

    2

    说明:

    只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1):

    [1,2,3]  =>  [2,2,3]  =>  [2,2,2]

    解:需要用到一个数学概念,当 x 为这个 N 个数的中位数时,可以使得距离最小。具体地,若 N 为奇数,则 x 必须为这 N 个数中的唯一中位数;若 N 为偶数,中间的两个数为 p 和 q,中位数为 (p + q) / 2,此时 x 只要是区间 [p, q] 中的任意一个数即可。

    public class Solution {

        public int minMoves2(int[] nums) {

            Arrays.sort(nums);

            int sum = 0;

            for (int num : nums) {

                sum += Math.abs(nums[nums.length / 2] - num);

            }

            return sum;

        }

    }

    相关文章

      网友评论

          本文标题:Leetcode 462. 最少移动次数使数组元素相等 II

          本文链接:https://www.haomeiwen.com/subject/rzcvyktx.html