文章
166
粉丝
0
获赞
0
访问
10.1k
预处理: 如果序列长度为 1,直接比较两个序列的唯一元素,较小的那个为中位数。
递归分治:
midA
和 midB
。midA
和 midB
:
midA == midB
,则 midA
(或 midB
)即为两个序列的中位数。midA < midB
,则说明中位数位于: A 的后半部分 或者 B 的前半部分。midA > midB
,则说明中位数位于: A 的前半部分 或者 B 的后半部分。midA
和 midB
的大小关系,舍弃相应的半部分序列,构成两个新的、长度减半的升序序列(注意处理序列长度为奇数或偶数的情况)。终止条件: 当序列长度缩小到 1 时,取两个序列中较小的一个作为中位数。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 递归函数,查找两个等长升序序列的中位数
int findMedian(const vector<int>& A, int startA, int endA,
const vector<int>& B, int startB, int endB) {
int length = endA - startA + 1; // 序列长度
// 基本情况:序列长度为 1
if (length == 1) {
return min(A[startA], B[startB]);
}
// 计算中位数位置
int midAIndex = startA + (length - 1) / 2...
登录后发布评论
暂无评论,来抢沙发