1. 解题思路
这一题思路上其实也比较直接,首先要使得中位数恰好为 k k k,我们只需要排序之后找到原本的中位数 m m m,然后分下述三种情况讨论即可:
- m = k m=k m=k:此时直接返回0即可;
- m < k m<k m<k:此时只需要把 m m m连同后半部分当中所有小于 k k k的数全部变为 k k k即可;
- m > k m>k m>k:此时只需要把 m m m连同前半部分当中所有大于 k k k的数全部变为 k k k即可;
我们将其翻译为代码语言即可完成本题的解答。
2. 代码实现
给出python代码实现如下:
class Solution:
def minOperationsToMakeMedianK(self, nums: List[int], k: int) -> int:
nums = sorted(nums)
n = len(nums)
mid = n // 2
if nums[mid] == k:
return 0
i = mid
ans = 0
if nums[mid] > k:
while i >= 0 and nums[i] > k:
ans += nums[i]-k
i -= 1
else:
while i < n and nums[i] < k:
ans += k - nums[i]
i += 1
return ans
提交代码评测得到:耗时611ms,占用内存38.1MB。