462.最小操作次数使数组元素相等II
链接:462.最小操作次数使数组元素相等II
难度:Medium
标签:数组、数学、排序
简介:给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加 1 或减 1。 您可以假设数组的长度最多为 10000。
题解 1 - typescript
- 编辑时间:2021-08-20
- 执行用时:88ms
- 内存消耗:39.9MB
- 编程语言:typescript
- 解法介绍:找中间值。
function minMoves2(nums: number[]): number {
  nums.sort((a, b) => a - b);
  const midNum = nums[(0 + nums.length - 1) >> 1];
  let ans = 0;
  for (const num of nums) {
    ans += Math.abs(num - midNum);
  }
  return ans;
}
题解 2 - javascript
- 编辑时间:2021-09-20
- 执行用时:84ms
- 内存消耗:39.9MB
- 编程语言:javascript
- 解法介绍:选取中间值,减少差值。
function minMoves2(nums: number[]): number {
  const n = nums.length;
  nums.sort((a, b) => a - b);
  const midNum = nums[n >> 1];
  let c = 0;
  for (const num of nums) {
    c += Math.abs(num - midNum);
  }
  return c;
}
题解 3 - cpp
- 编辑时间:2022-05-19
- 执行用时:8ms
- 内存消耗:10.5MB
- 编程语言:cpp
- 解法介绍:遍历。
class Solution {
   public:
    int minMoves2(vector<int> &nums) {
        sort(nums.begin(), nums.end());
        int m = nums[nums.size() / 2];
        int ans = 0;
        for (auto &num : nums) {
            ans += abs(m - num);
        }
        return ans;
    }
};