文章

24

粉丝

0

获赞

0

访问

2.4k

头像
2011年计算机学科专业基础综合试题 - 第42题回答
数据结构
发布于2025年9月19日 20:46
阅读数 65

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 ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发