leetcode no4 - beyondnlp/nlp GitHub Wiki

double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
    int max, flag = 1;
    int *nums, i, j, x, size=nums1Size+nums2Size;
    double ret;
    max = size/2+1;

    nums = malloc(sizeof(int)*size);
    for( i=0,j=0,x=0; ;  ){
        if( nums1[i] < nums2[j] ){
            nums[x++] = nums1[i++];
            if( i >= nums1Size ){
                while( x <= max ) nums[x++] = nums2[j++];
            }
        }else if ( nums1[i] == nums2[j] ){
            nums[x++] = nums1[i++];
            nums[x++] = nums2[j++];
            if( i >= nums1Size && j >= nums2Size ) break;


            if( i >= nums1Size ){
                while( x <= max ) nums[x++] = nums2[j++];
            }

            if( j >= nums2Size ){
                while( x <= max ) nums[x++] = nums1[i++];
            }


        }else{
            nums[x++] = nums2[j++];
            if( j >= nums2Size ){
                while( x <= max )  nums[x++] = nums1[i++];
            }
        }
        if( x >= max ) break;
    }

    if( flag ) x = size/2;
    if( !(size % 2 ) ){
        ret = (double)(((double)nums[x-1]+(double)nums[x])/2);
    }else{
        ret = (double)nums[x];
    }
    free( nums );
    return ret;

}