思路
(以下都是个人看法与解答)
方法一:合并两表,找出中位数
方法二:求出表长度,再用两指针按大小遍历两表,找出在表长度/2的位置(✔)
代码
void findmid(ElemType A[],ElemType B[]){
int i;
//i为A的长度,也是两表合并后中位数的位置
for(i=0;A[i];i++);
int p=-1,q=-1,count=0,mid;
while(count<i){
if(A[p+1]<B[q+1]){
p++;count++;
if(count==i) mid=A[p];
}else{
q++;count++;
if(count==i) mid=B[q];
}
}
}
分析
遍历了一次A表,又对A、B表遍历了一半,所以时间复杂度为O(n),空间复杂度为O(1)。
总结
为什么一开始用p=-1,q=-1,因为要让指针移动一次,计数一次,这样计数到长度的一半(即中位数的位置)时,最后移动的指针正好落到中位数上。