double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
//合并两个数组,使用二分查找
int size=nums1Size+nums2Size;
int numAllSize[size];
double medianNumber;
memset(numAllSize,0,sizeof(int)*size);
int i=0;
int j=0;
int k=0;
int m=0;
for(m;m<nums1Size;m++){ printf("The nums1[%d] is %d\n",m,nums1[m]);}
//循环数组,同时记录角标信息
while(i<nums1Size&&j<nums2Size)
{
if(nums1[i]<=nums2[j])
{
numAllSize[k]=nums1[i];
i++;
k++;
}
else{
numAllSize[k]=nums2[j];
j++;
k++;
}
if(k>=size/2+1){break;}
}
while(k<=size/2+1&&i<nums1Size)
{
numAllSize[k]=nums1[i];
printf( "nums1[%d] is %d \n ", i,nums1[i]);
printf("numAllSize[%d] is %d \n",k,numAllSize[k]);
i++;
k++;
}
while(k<=size/2+1&&j<nums2Size)
{
numAllSize[k]=nums2[j];
j++;
k++;
}
// 略长的还没处理完
if(size&1==1)//位运算确定 奇数取中间
{
medianNumber=(double)numAllSize[size/2];
//printf("The medianNumber is %lf\n",medianNumber);
}
else
{
medianNumber=((double)numAllSize[size/2]+(double)numAllSize[size/2-1])/2;
//for(m;m<=size/2;m++){ printf("The numAllSize[%d] is %d\n",m,numAllSize[m]);}
printf("The medianNumber is %lf\n",medianNumber);
}
return medianNumber;
}
1、思路:充分利用两个数组的有序特性,像新数组里放数,并记录位置
2、中位数,数组只需要放一半即可,最后数据类型强转