跳到主要内容

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;
}
};