/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @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;
}
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @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;
}