1 条题解
-
0
A. 数组的中位数 详细题解
题目核心理解
给定一个长度为 的数组 。 数组的中位数定义为:将数组非降序排序后,位于下标 位置上的数。
每次操作可以选择任意一个元素并将其加 。 目标:求出使数组中位数严格变大所需的最少操作次数。
核心思路
1. 关键性质
- 中位数只和排序后数组后半部分的数字有关。
- 要让中位数变大,只需要把原中位数位置及之后连续等于原中位数的数各加 。
- 最优策略:只修改排序后从中位数位置开始、所有等于原中位数的数。
2. 计算规则
设排序后数组为 。 中位数位置:
原中位数 。
找到最大的下标 ,使得 。 最少需要的操作次数为:
算法流程
- 将数组从小到大排序。
- 计算中位数位置 。
- 从 向后遍历,找到最后一个等于 的位置 。
- 答案即为从 到 的数字个数。
- 输出该数量。
公式与复杂度分析
核心公式:
$$ans = \text{满足 } a_i = a[pos] \text{ 且 } i \ge pos \text{ 的元素个数} $$复杂度
- 排序:
- 遍历统计:
- 总时间复杂度:
可轻松处理 、所有测试用例 的数据范围。
- 1
信息
- ID
- 6566
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者