C语言代码练习4-leetcode_4 寻找两个正序数组的中位数

本文介绍了如何在编程中正确处理两个正序数组的中位数问题,特别关注了空数组的情况,使用双指针法合并数组并计算中位数,最后释放动态分配的内存。
摘要由CSDN通过智能技术生成

寻找两个正序数组的中位数

//在刷题时候发现 某一个数组置空时答案错误 ,所以专门把空数组拉出来处理。

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {



    //空数组一直判断不出来,直接在开头处理
     if (nums1Size == 0) {
        return nums2Size % 2 == 0 ? (nums2[(nums2Size / 2) - 1] + nums2[nums2Size / 2]) / 2.0 : nums2[nums2Size / 2];
    } 
    else if (nums2Size == 0) {
        return nums1Size % 2 == 0 ? (nums1[(nums1Size / 2) - 1] + nums1[nums1Size / 2]) / 2.0 : nums1[nums1Size / 2];
    }


    int i=0,j=0;
    int k=0;
    int *nums3=(int *)malloc(sizeof(int)*(nums1Size+nums2Size));

    while(i<nums1Size&&j<nums2Size){
        if(nums1[i]<=nums2[j]){
            nums3[k++]=nums1[i++];
            
        }
        else{
            nums3[k++]=nums2[j++];
        }
    }
    while(i<nums1Size){

        nums3[k++]=nums1[i++];
    }
        
   
    while(j<nums2Size){
        nums3[k++]=nums2[j++];
    }
            
            
        



    int m=nums1Size+nums2Size;
    double s;
    if(m%2==0){
        s=(nums3[(m/2)-1]+nums3[m/2]);
        
    }
    else{
        s=2*nums3[m/2]; 
    }
    free(nums3);
    return s/2;

     
     
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值