重点:使用折半查找法。
以下为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;
}
}