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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012736685/article/details/88142964

一、题目描述

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

二、例如

例如:

输入:
[1,2,3]
输出:
2

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

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

三、分析

思路:找到中位数,然后计算所有数与中位数的差值之和就是答案。

四、实现

class Solution {
public:
    int minMoves2(vector<int>& nums) {
        int n = nums.size();
        sort(nums.begin(), nums.end());

        int res=0;
        int tmp=nums[n / 2];   // 中位数
        for(int i = 0; i < n; i++)
        {
            res += abs(nums[i]-tmp);
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/u012736685/article/details/88142964