输入两个长度相同的升序数组,返回这两个数组合并后的中位数
C++代码:
int bisearch_midNum(int a[],int b[],int n){ int s1=0,s2=0,d1=n-1,d2=n-1,m1,m2; while(s1!=d1 || s2!=d2){//只要a,b序列同时出现了s==d的情况,才能False退出 m1=(s1+d1)/2; m2=(s2+d2)/2; system("pause"); if(a[m1]==b[m2]) return a[m1]; else if(a[m1]<b[m2]){//∈[m1,m2] d2=m2; if((d1-s1)%2){//偶数 m1++;//舍去中间位 } s1=m1; }else{ //∈[0,m1]∪[m2,n] d1=m1; if((d2-s2)%2){//偶数 m2++;//舍去中间位 } s2=m2; } } //返回较小者 return min(a[s1],b[s2]); }
一步一调理解此题:
●第一组数据:
第一步:a→ ←b
(如果【s1,d1】是偶数,就舍弃m1,即(m1,d1])
第二步:a→ ←b
第三步:←a b→
第四步:←a b→
b的中位数取9是因为【←a b→】这种情况要舍弃左边的m。
m1==s1,m2==s2,终止。在a【s1】与 b【s2】中取最小者,即6。
两个数组融合后的中位数也为6:
原文地址:https://www.cnblogs.com/TQCAI/p/8168812.html
时间: 2024-11-05 12:09:51