Leetcode 3107. Minimum Operations to Make Median of Array Equal to K

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 解题思路

这一题思路上其实也比较直接,首先要使得中位数恰好为 k k k,我们只需要排序之后找到原本的中位数 m m m,然后分下述三种情况讨论即可:

  1. m = k m=k m=k:此时直接返回0即可;
  2. m < k m<k m<k:此时只需要把 m m m连同后半部分当中所有小于 k k k的数全部变为 k k k即可;
  3. 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值