给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n))
。
示例 1:
输入:nums1 = [1,3], nums2 = [2] 输出:2.00000 解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4] 输出:2.50000 解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
© 2023 领扣网络(上海)有限公司
思路:中位数就是两个数组合并后中间位置的数,如果总个数是奇数个,那就是中间的一个数,如果是偶数个就是中间两个数的平均数。因此只需要找到合并数组中间的一两个数就行了。所以for循环只需进行到len/2。
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
int len=nums1Size+nums2Size;
int p=0,q=0;
int head=-1,next=-1;
for(int i=0;i<=len/2;i++)
{
head=next;
if(p<nums1Size&&(q>=nums2Size||nums1[p]<nums2[q]))
{
next=nums1[p];
p++;
}
else
{
next=nums2[q];
q++;
}
}
if(len%2==0)
{
return (head+next)/2.0;
}
else{
return next;
}
}