publicclassSolution { publicdoubleFindMedianSortedArrays(int[] nums1, int[] nums2){ int m = nums1.Length; int n = nums2.Length; if (m > n) return FindMedianSortedArrays(nums2, nums1);
int k = (m + n + 1)/2; int left = 0; int right = m; while (left < right) { int i = (left + right)/2; int j = k - i; if (nums1[i] < nums2[j - 1]) left = i + 1; else right = i; } int m1 = left; int m2 = k - left; int c1 = Math.Max(m1 == 0 ? int.MinValue : nums1[m1 - 1], m2 == 0 ? int.MinValue : nums2[m2 - 1]);
if ((m + n)%2 == 1) return c1;
int c2 = Math.Min(m1 == m ? int.MaxValue : nums1[m1], m2 == n ? int.MaxValue : nums2[m2]); return (c1 + c2)*0.5; } }