两个有序数组合并,并求中位数(复杂度为O(m+n))

本文介绍了一种合并两个有序数组并找到它们中位数的方法。通过比较元素大小逐个填充新数组,确保合并后的数组仍保持有序。特别地,算法处理了合并数组长度为奇数或偶数的情况,并强调了在计算中位数时类型转换的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先将两个有序数组合并成为一个有序数组,然后再求中位数。合并时,判断条件是i<m || j<n

特别注意,中位数用double,int数据进行计算时,要先转化为double(直接赋值即可),然后再计算


public double findMedianSortedArrays(int A[], int B[]) {
        int l1 = A.length;
        int l2 = B.length;
        int [] C = new int[l1+l2];
        int i =0,j =0,k=0;
        while(i<l1 || j<l2){
            if(i >= l1){
                C[k] = B[j];
                j++;
            }else if(j >= l2){
                C[k] = A[i];
                i++;
            }else{
                if(A[i]<B[j]){
                   C[k] =  A[i];
                   i++;
                }else{
                   C[k] =  B[j];
                   j++;
                }
            }
            k++;
        }
        double median = 0,a=0,b=0;
        k = l1+l2;
        if(k%2 != 0){
            median = C[(k-1)/2];
        }else{
            a = C[k/2];
            b = C[k/2-1];
            median = (a+b)/2;
        }
        return median;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值