3107 使数组中位数等于k的最少操作数
1. 题目描述
2. 解题思路
(1) 对nums
数组从小到大排序,注意到mid=nums.size()/2位置处的值为中位数;
(2) 判断中位数与k的大小关系:
- 若中位数大于k,则向左依次使每一个大于k的值变为k,记录所需操作数;
- 若中位数小于等于k,则向右依次使每一个小于k的值变为k,记录所需操作数。
3. 代码实现
class Solution {
public:
long long minOperationsToMakeMedianK(vector<int>& nums, int k) {
int n = nums.size();
// 对nums进行从大到小排序
ranges::sort(nums);
long long res = 0;
// 排序后, 若数组长度为偶数, mid位置为较大值
int mid = n / 2;
if (nums[mid] > k) {
for (int i = mid; i >= 0 && nums[i] > k; i--) {
res += nums[i] - k;
}
} else {
for (int i = mid; i < n && nums[i] < k; i++) {
res += k - nums[i];
}
}
return res;
}
};
标签:操作数,nums,int,res,3107,中位数,mid,Day
From: https://blog.csdn.net/qewa132/article/details/141161451