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

文章目录

  • 题目
  • 题解
    • 中位数 无优化
    • 中位数 优化


题目

给你一个长度为 n 的整数数组 nums ,返回使所有数组元素相等需要的最少移动数。

在一步操作中,你可以使数组中的一个元素加 1 或者减 1 。

示例 1:

输入:nums = [1,2,3]
输出:2
解释:
只需要两步操作(每步操作指南使一个元素加 1 或减 1):
[1,2,3]  =>  [2,2,3]  =>  [2,2,2]

示例 2:

输入:nums = [1,10,2,9]
输出:16

提示:

n == nums.length
1 <= nums.length <= 105
-109 <= nums[i] <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-moves-to-equal-array-elements-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

中位数 无优化

LeetCode 462. 最少移动次数使数组元素相等 II_第1张图片

class Solution {
    public int minMoves2(int[] nums) {
        Arrays.sort(nums);
        int num= nums[nums.length/2];
        int count=0;
        for(int i=0;i<nums.length;++i){
            count+=(Math.abs(nums[i]-num));
        }
        return count;
    }
}

中位数 优化

LeetCode 462. 最少移动次数使数组元素相等 II_第2张图片

class Solution {
    public int minMoves2(int[] nums) {
        Arrays.sort(nums);
        int i = 0,j = nums.length - 1, res = 0;
        while (i < j) {
            res += nums[j--] - nums[i++];
            //res = res + nums[j--] -nums[i++];
            //计算两个数字到中位数之间的差值和
            //也就是两个数字之间的差值
        }
        return res;
    }
}



你可能感兴趣的:(LeetCode,leetcode,算法,排序算法)