LeetCode 462. Minimum Moves to Equal Array Elements II javascript解决方案

223 阅读1分钟

题意:
一个数组,最多10000长度,选取一个值,数组所有数字都加/减一个差值,求这个差值的最小值。

思路:
中位数
代码:

/**
 * @param {number[]} nums
 * @return {number}
 */
var minMoves2 = function(nums) {
    nums.sort((a, b) => a - b);
    let mid = 0;
    let len = nums.length;
    if(len % 2 === 1){ // 奇数
        mid = Math.round(nums[Math.round((len - 1) / 2)]);
    }
    else{
        mid = Math.round((nums[Math.round((len - 2) / 2)] + nums[Math.round(len / 2)]) / 2);
    }
    let total = 0;
    nums.forEach((obj) => {
        total += Math.abs(obj - mid);
    });
    return total;
};