文章
25
粉丝
0
获赞
0
访问
12.8k
1.A和B中各自有n个元素,将找A[i]将A划分为两部分,在B中找B[j]将B划分为两部分,其中j=n-i,满足条件:A左半和 B 左半的所有元素(共 n个)都小于等于 A右半和 BB 右半的所有元素(共 n 个)。此时,中位数就是 max(A[i−1],B[j−1])max(A[i−1],B[j−1])(即左边部分的最大值)。
2.
int findMedian(int A[], int B[], int n) {
int low = 0;
int high = n;
while (low <= high) {
int i = (low + high) / 2; // A中的分割点
int j = n - i; // B中的分割点
// 检查是否需要调整分割点
if (i < n && j > 0 && B[j-1] > A[i]) {
// A[i]太小,需要增大i(让A左边多取一些元素)
low = i + 1;
} else if (i > 0 && j < n && A[i-1] > B[j]) {
// A[i-1]太大,需要减小i(让A左边少取一些元素)
high = i - 1;
} else {
// 找到合适的分割点,计算中位数
int left_max;
if (i == 0) {
// A左边没有元素,中位数来自B的左边部分
left_max = B[j-1];
} else if (j ...
登录后发布评论
暂无评论,来抢沙发