Skip to content

Latest commit

 

History

History
56 lines (54 loc) · 1.49 KB

File metadata and controls

56 lines (54 loc) · 1.49 KB

#4. Median of Two Sorted Arrays 题目链接

/*
 * 利用归并的方法进行查找,找到后返回
 * 但是时间复杂度是O(m + n),不是O(lg(m + n)
 * todo 改进时间复杂度
 */
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
    int sumSize = nums1Size + nums2Size;
    int flag = sumSize % 2;
    int mid = sumSize / 2;
    int *newNums = (int *)malloc(sizeof(int) * sumSize);
    int i,j,k;
    for (i = j= k = 0; j < nums1Size && k < nums2Size; i++)
    {
        if (nums1[j] < nums2[k])
        {
            newNums[i] = nums1[j++];
        } else
        {
            newNums[i] = nums2[k++];
        }
        if (i == mid && !flag)
            return ((double)newNums[i] + newNums[i-1])/2;
        else if (i == mid)
            return (double)newNums[i];
    }
    if (j == nums1Size)
    {
        for (k; k < nums2Size; k++, i++)
        {
            newNums[i] = nums2[k];
            if (i == mid && !flag)
                return ((double)newNums[i] + newNums[i-1])/2;
            else if (i == mid)
                return (double)newNums[i];
        }

    }
    else if (k == nums2Size)
    {
        for (j; j < nums1Size; j++, i++)
        {
            newNums[i] = nums1[j];
            if (i == mid && !flag)
                return ((double)newNums[i] + newNums[i-1])/2;
            else if (i == mid)
                return (double)newNums[i];
        }

    }
    return -1.0;
}