文章

35

粉丝

0

获赞

0

访问

1.2k

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

1.基本思想:对A和B序列采用归并的思想,但是不把他们归并到新的空间数组中,而是用一个计数器count,两个数组元素比较一次,count加1,当比较次数为L时,即得到的是A和B序列的中位数,输出这个值即可

2.代码如下

int findMidOfAAndB(int A[],int B[],int L){
    int count = 0;//归并计数器
    int temp = 0;//暂存当前值
    int a=0;int b=0;//数组A和B的指针
    while(a<L&&b<L){
      if(A[a]<B[b]){
        temp = A[a];
        a++;
      }else{
        temp = B[b];
        b++;
      }
      count++;
      if(count = L){
        break;
      }
    }
    return temp;
}

3.时间复杂度为O(n),空间复杂度为O(1)


评分及理由

(1)得分及理由(满分4分)

得分:2分

理由:学生采用了归并思想,通过计数器找到第L个元素作为中位数。这种方法能够正确找到两个升序序列的中位数,思路基本正确。但与标准答案的高效二分法相比,时间复杂度为O(n)而非最优的O(log n),因此不能给满分。考虑到思路可行且能解决问题,给予2分。

(2)得分及理由(满分9分)

得分:6分

理由:代码实现了归并思路,逻辑基本正确。但存在以下问题:
1. 代码中`if(count = L)`应为`if(count == L)`,这是赋值运算符误写为比较运算符的逻辑错误
2. 当a或b指针先到达L时,循环会提前结束,可能无法正确找到第L个元素
3. 缺少对边界情况的完整处理
由于核心逻辑正确但存在实现缺陷,扣除3分。

(3)得分及理由(满分2分)

得分:2分

理由:正确分析了时间复杂度O(n)和空间复杂度O(1),与算法实现相符,给满分。

题目总分:2+6+2=10分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发