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。
本文介绍了如何解决LeetCode题目3107,通过分析解题思路,针对数组中位数与目标值K的关系,给出了三种情况下的操作策略,并提供了Python代码实现,展示了在611ms内完成并占用38.1MB内存的解决方案。
1542

被折叠的 条评论
为什么被折叠?



