#define max(a,b) (a>b?a:b) doublefindMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) { int total=nums1Size+nums2Size; int loc=1+(total>>1);// 左侧数字数量 int flag=(1^total)&1;//if flag=0, only one number int p1=0,p2=0; // 先找到中位数的位置并切片,确保中位数在两个数组的左侧 while(loc>0){ int cnt1=min(nums1Size,(1+loc)/2); int cnt2=min(nums2Size,max((1+loc)/2,loc-cnt1)); if(nums1Size&&nums2Size){ if(nums1[p1+cnt1-1]<nums2[p2+cnt2-1]){ p1=p1+cnt1; loc-=cnt1; nums1Size-=cnt1; }else{ p2=p2+cnt2; loc-=cnt2; nums2Size-=cnt2; } }elseif(!nums1Size){ p2=p2+loc; nums2Size-=loc; loc=0; }elseif(!nums2Size){ p1=p1+loc; nums1Size-=loc; loc=0; } }