LeetCode 462. 最小操作次数使数组元素相等 II
题目描述
思路分析
解法一:排序取中位数(推荐)
核心思路:
- 目标值取数组中位数可使绝对差之和最小。
- 排序后选取中位数,累加所有元素与中位数的绝对差。
复杂度分析:
- 时间复杂度:O(n log n),其中 n 表示数组长度。
- 空间复杂度:O(1) 额外空间(排序可能原地进行)。
import java.util.Arrays;
class Solution {
public int minMoves2(int[] nums) {
Arrays.sort(nums);
int median = nums[nums.length / 2];
long moves = 0;
for (int num : nums) {
moves += Math.abs(num - median);
}
return (int) moves;
}
}
import "sort"
func minMoves2(nums []int) int {
sort.Ints(nums)
median := nums[len(nums)/2]
moves := 0
for _, num := range nums {
if num >= median {
moves += num - median
} else {
moves += median - num
}
}
return moves
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 203. 移除链表元素 | 简单 | 双指针 |
| 296. 最佳的碰头地点 | 困难 | 中位数 |
| 1480. 一维数组的动态和 | 简单 | 前缀和 |
| 1700. 无法吃午餐的学生数量 | 简单 | 模拟 |
| 1710. 卡车上的最大单元数 | 简单 | 贪心 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!