260数字匹配问题
题解
问题概述
小 F 拥有一串数字,需按照以下规则将这些数字两两配对:
- 数字对中两个数字的差的绝对值必须大于等于给定的差异值
M
。 - 每个数字只能被配对一次,不能出现在多个数字对中。
目标是找出最多能配对出多少对数字。
解题思路
为了最大化配对数,采取贪心策略:
- 排序:首先对数字列表
X
进行排序,以便于后续配对时能够高效地找到满足条件的数字对。 - 双指针方法:
- 题目中要求数字两两配对并且不能重复,因此最多的配对个数为$\lfloor \frac{n}{2} \rfloor$,因为数组是有序的。最优的情况一定是其中一个数字来自数组的左半部分,另一个数字来自右半部分
- 将列表分为两部分,左指针
l
指向较小的数字,右指针r
从中间开始指向较大的数字。遍历右指针,尝试找到与左指针指向的数字差值至少为M
的配对。如果差值小于M
,那么继续移动右指针。
- 终止条件:当左指针超过中间位置,停止配对过程。
代码解析
1 |
|
时间复杂度
- 排序的时间复杂度为
O(N log N)
。 - 空间复杂度
O(1)
260数字匹配问题
https://kongshuilinhua.github.io/2024/12/29/260数字匹配问题/