1 条题解

  • 0
    @ 2026-4-18 13:46:59

    A. 数组的中位数 详细题解

    题目核心理解

    给定一个长度为 nn 的数组 aa。 数组的中位数定义为:将数组非降序排序后,位于下标 n2\lceil\frac{n}{2}\rceil 位置上的数。

    每次操作可以选择任意一个元素并将其11。 目标:求出使数组中位数严格变大所需的最少操作次数


    核心思路

    1. 关键性质

    • 中位数只和排序后数组后半部分的数字有关。
    • 要让中位数变大,只需要把原中位数位置及之后连续等于原中位数的数各加 11
    • 最优策略:只修改排序后从中位数位置开始、所有等于原中位数的数

    2. 计算规则

    设排序后数组为 aa。 中位数位置:

    pos=n2pos = \lceil\frac{n}{2}\rceil

    原中位数 x=a[pos]x = a[pos]

    找到最大的下标 tt,使得 a[t]=xa[t] = x。 最少需要的操作次数为:

    tpos+1t - pos + 1

    算法流程

    1. 将数组从小到大排序。
    2. 计算中位数位置 pos=n2pos = \lceil\frac{n}{2}\rceil
    3. pospos 向后遍历,找到最后一个等于 a[pos]a[pos] 的位置 tt
    4. 答案即为从 pospostt 的数字个数。
    5. 输出该数量。

    公式与复杂度分析

    核心公式:

    pos=n2pos = \left\lceil \frac{n}{2} \right\rceil $$ans = \text{满足 } a_i = a[pos] \text{ 且 } i \ge pos \text{ 的元素个数} $$

    复杂度

    • 排序:O(nlogn)O(n\log n)
    • 遍历统计:O(n)O(n)
    • 总时间复杂度:O(nlogn)O(n\log n)

    可轻松处理 n105n\le 10^5、所有测试用例 n2×105\sum n\le 2\times10^5 的数据范围。

    • 1

    信息

    ID
    6566
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者