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

被折叠的 条评论
为什么被折叠?



