Problem Name: Median of Two Sorted Arrays

Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n)).

Example 1:

Input: nums1 = [1,3], nums2 = [2]
Output: 2.00000
Explanation: merged array = [1,2,3] and median is 2.

Example 2:

Input: nums1 = [1,2], nums2 = [3,4]
Output: 2.50000
Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.

Constraints:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106

Solution:

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){

    if((nums1 == NULL) || (nums2 == NULL)){
        return 0;
    }

    int maxLen = nums1Size + nums2Size;
    int temp1 = 0;
    int temp2 = 0;
    int value = maxLen/2 + 1;

    int *out = (int *)calloc(maxLen, sizeof(int));
    if(out == NULL)
    {
        return 0;
    }

    for(int i = 0; i < value; i++)
    {
        if((temp1 < nums1Size) && (temp2 < nums2Size))
        {
            if(nums1[temp1] < nums2[temp2])
            {
                out[i] = nums1[temp1];
                temp1++;
            }
            else
            {
                out[i] = nums2[temp2];
                temp2++;
            }
        }
        else if(temp1 < nums1Size)
        {
            out[i] = nums1[temp1];
            temp1++;
        }
        else
        {
            out[i] = nums2[temp2];
            temp2++;
        }
    }

    temp1 = maxLen/2;

    if(maxLen%2)
    {
        return (double)out[temp1];
    }

    return (double)(out[temp1] + out[temp1 - 1])/2;
}