求两个数组的中位数

该博客介绍了如何通过调整数组长度,然后利用二分法寻找两个数组合并后的中位数。解题策略是确保较短数组与较长数组的一半进行比较,最终找到整体中位数。

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

解题思路:
(1)使数组1的长度为最短的。
(2)将两个数组分成左半边和右半边:
在这里插入图片描述
下面是具体实现:

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        if (nums1.length>nums2.length)
            return findMedianSortedArrays(nums2,nums1);
        int length1 = nums1.length;
        int length2 = nums2.length;

        //left的最大值mid1,right的最小值mid2
        int mid1 = 0,mid2 = 0;
        int left = 0,right = length1;
        while (left<=right){
            //将两个数组分成left,和righth两个相等(i为nums1的左,j位nums2的左)
            int i = (left+right)/2;
            int j = (length1+length2+1)/2-i;
            //nums1左1的值
            int nums_if1 = (i==0?Integer.MIN_VALUE:nums1[i-1]);
            //nums1右1的值
            int nums_ir1 = (i==length1?Integer.MAX_VALUE:nums1[i]);
            //nums2左1的值
            int nums_if2 = (j==0?Integer.MIN_VALUE:nums2[j-1]);
            //nums2右1的值
            int nums_ir2 = (j==length2?Integer.MAX_VALUE:nums2[j]);
                    if(nums_if1 <= nums_ir2){
                            mid1 = Math.max(nums_if1,nums_if2);
                            mid2 = Math.min(nums_ir1,nums_ir2);
                            left = i+1;
                    }else {
                        right = i-1;
                    }
        }
        return (length1+length2)%2==0?(mid1+mid2)/2.0:mid1;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值