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

题:给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加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;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。