/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums1 int整型一维数组 
 * @param nums1Len int nums1数组长度
 * @param nums2 int整型一维数组 
 * @param nums2Len int nums2数组长度
 * @return double浮点型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
double Median(int* nums1, int nums1Len, int* nums2, int nums2Len ) {
    // write code here
    int i=0,j=0,k=0,mid=0,OddEven=(nums1Len+nums2Len)%2,LastNums1=0;
    if(OddEven==1)
    mid=(nums1Len+nums2Len)/2+1;
    else
    mid=(nums1Len+nums2Len)/2;
    double ret=0;
    while(i<nums1Len && j< nums2Len && k<mid)
    {
        if(nums1[i]<nums2[j])
        {
            i++;
            LastNums1=1;
        }
        else
        {
            j++;    
            LastNums1=0;
        }
        k++;
    }
    //不同的跳出循环的方式
    if(k==mid)
    {
        
        if(OddEven==1)
        {
            //[1,2,3,4,5],[6,7,8,9]
            if(LastNums1==1)
            ret=nums1[i-1];
            //[6,7,8,9],[1,2,3,4,5]
            else
            ret=nums2[j-1];
        }
        else
        {
            //[1,2,3,4,5],[6,7,8,9,10]
            if(LastNums1==1)
            ret=(nums1[i-1]+nums2[j])*1.0/2;
            //[6,7,8,9,10],[1,2,3,4,5]
            else
            ret=(nums1[i]+nums2[j-1])*1.0/2;
        }
        
    }
    else if(i==nums1Len)
    {
        //[1],[2,3]
        if(OddEven==1)
            ret=nums2[j+mid-k-1];
        //[1],[2,3,4]
        else
            ret=(nums2[j+mid-k-1]+nums2[j+mid-k])*1.0/2;
    }
    else if(j== nums2Len)
    {
        if(OddEven==1)
            ret=nums1[i+mid-k-1];
        else
            ret=(nums1[i+mid-k-1]+nums1[i+mid-k])*1.0/2;
    }
    return ret;
}