4. Median of Two Sorted Arrays

本文介绍了一种利用折半查找法寻找两个有序数组中位数的方法,并提供了C#语言的具体实现。该方法首先判断两个数组长度,通过调整确保处理数组长度较短的一方。随后采用折半查找策略,通过不断调整索引来平衡两个数组的比较关系,最终确定中位数。

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

重点:使用折半查找法。 
以下为c#实现。参考solution的java实现,仍有些不明白的地方。

public class Solution {
    public double FindMedianSortedArrays(int[] nums1, int[] nums2) {
       int m=nums1.Length,n=nums2.Length;
        if(m>n)
        {
            int[] tmp=nums1;
            nums1=nums2;
            nums2=tmp;
             int t= m; m = n; n = t;
        }
        int iMin=0,iMax=m,i=0,j=0;
        while(iMin<=iMax){
            i=(iMin+iMax)/2;
            j=(m+n+1)/2-i;
            if(i<iMax&&nums1[i]<nums2[j-1])
                iMin=i+1;
            else if(i>iMin&&nums1[i-1]>nums2[j])
                iMax=i-1;
            else
            {
                int maxLeft = 0;
                if (i == 0) { maxLeft = nums2[j-1]; }
                else if (j == 0) { maxLeft = nums1[i-1]; }
                else { maxLeft = Math.Max(nums1[i-1], nums2[j-1]); }
                if ( (m + n) % 2 == 1 ) { return maxLeft; }

                int minRight = 0;
                if (i == m) { minRight = nums2[j]; }//以下语句不明觉厉
                else if (j == n) { minRight = nums1[i]; }
                else { minRight = Math.Min(nums2[j], nums1[i]); }

                return (maxLeft + minRight) / 2.0;

            }
        }  
          return 0.0;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值