problem 4
This commit is contained in:
parent
99a222c319
commit
4fd9dbe8da
49
MedianOfTwoSortedArrays.cs
Normal file
49
MedianOfTwoSortedArrays.cs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
public class Solution {
|
||||||
|
public double FindMedianSortedArrays(int[] nums1, int[] nums2) {
|
||||||
|
int middle = (nums1.Length + nums2.Length + 1) / 2 - 1;
|
||||||
|
int i = 0, j = 0;
|
||||||
|
while (i + j < middle)
|
||||||
|
{
|
||||||
|
if (i == nums1.Length || j == nums2.Length) {
|
||||||
|
return OneArrayLeft(nums1, nums2, i, j, middle);
|
||||||
|
}
|
||||||
|
CompareNumbers(nums1, nums2, ref i, ref j);
|
||||||
|
}
|
||||||
|
if (i == nums1.Length || j == nums2.Length) {
|
||||||
|
return OneArrayLeft(nums1, nums2, i, j, middle);
|
||||||
|
}
|
||||||
|
if (2 * middle + 2 == nums1.Length + nums2.Length) {
|
||||||
|
double result = CompareNumbers(nums1, nums2, ref i, ref j);
|
||||||
|
if (i == nums1.Length) {
|
||||||
|
return (result + nums2[j]) / 2.0;
|
||||||
|
}
|
||||||
|
if (j == nums2.Length) {
|
||||||
|
return (result + nums1[i]) / 2.0;
|
||||||
|
}
|
||||||
|
return (result + CompareNumbers(nums1, nums2, ref i, ref j)) / 2.0;
|
||||||
|
}
|
||||||
|
return nums1[i] < nums2[j] ? nums1[i] : nums2[j];
|
||||||
|
}
|
||||||
|
|
||||||
|
public int CompareNumbers(int[] nums1, int[] nums2, ref int i, ref int j) {
|
||||||
|
if (nums1[i] < nums2[j]) {
|
||||||
|
return nums1[++i - 1];
|
||||||
|
}
|
||||||
|
return nums2[++j - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
public double OneArrayLeft(int[] nums1, int[] nums2, int i, int j, int middle) {
|
||||||
|
if (i == nums1.Length) {
|
||||||
|
j += middle - i - j;
|
||||||
|
if (2 * middle + 2 == nums1.Length + nums2.Length) {
|
||||||
|
return (nums2[j] + nums2[j + 1]) / 2.0;
|
||||||
|
}
|
||||||
|
return nums2[j];
|
||||||
|
}
|
||||||
|
i += middle - i - j;
|
||||||
|
if (2 * middle + 2 == nums1.Length + nums2.Length) {
|
||||||
|
return (nums1[i] + nums1[i + 1]) / 2.0;
|
||||||
|
}
|
||||||
|
return nums1[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user