problem 4

This commit is contained in:
Buduf 2022-04-14 13:35:16 +02:00
parent 99a222c319
commit 4fd9dbe8da

View 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];
}
}