Leetcode462-最少移动次数使数组元素相等 II

题目描述

给定一个数组,都是整数。给定一种操作,每次能够使得数组中的任意一个数加一或者减一。问最少多少次操作能够使得数组中的元素大小相等。

示例

输入:
[1,2,3]
输出:
2
说明:
只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1)。

思路

首先对整个数组排序。想象数组中的每一个数都在数轴上,最终我们数组中的值为x.那么所需要求解的就是数组中的每一个数到达x的距离和最小。根据绝对值不等式我们知道,当且仅当x处于数组的中间时,所求值最小。

代码

class Solution {
public:
    int minMoves2(vector<int>& nums) {
        int res = 0;
        sort(nums.begin(),nums.end());
        int x = nums[nums.size()/2];
        for (auto y:nums)
            res += abs(y-x);
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_44010678/article/details/88387856