文章
24
粉丝
0
获赞
0
访问
2.4k
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 ...
登录后发布评论
暂无评论,来抢沙发