There are two sorted arrays
nums1
and
nums2
of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
思路就是两个合并
classSolution{
public:
double findMedianSortedArrays (vector< int>& nums1 , vector< int>& nums2 ) {
int iNums1Size = nums1.size();
int iNums2Size = nums2.size();
if (iNums1Size == 0 && iNums2Size == 0)
{
return 0;
}
else if ( iNums1Size ==0)
{
if (iNums2Size % 2 == 0)
return (nums2 [iNums2Size / 2 ] + nums2 [iNums2Size / 2 - 1 ]) / 2.0;
else
return nums2 [iNums2Size / 2 ];
}
else if (iNums2Size == 0)
{
if (iNums1Size % 2 == 0)
return (nums1 [iNums1Size / 2 ] + nums1 [iNums1Size / 2 - 1 ]) / 2.0;
else
return nums1 [iNums1Size / 2 ];
}
vector<int > vNum;
vector<int >::iterator iterNum1Begin = nums1 .begin();
vector<int >::iterator iterNum2Begin = nums2 .begin();
vector<int >::iterator iterNum1End = nums1 .end();
vector<int >::iterator iterNum2End = nums2 .end();
int iSize = iNums1Size + iNums2Size;
for (int i = 0;i < iSize;i ++)
{
if (iterNum1Begin != iterNum1End && iterNum2Begin != iterNum2End)
{
if (* iterNum1Begin < * iterNum2Begin)
{
vNum.push_back (*iterNum1Begin );
iterNum1Begin++;
}
else
{
vNum.push_back (*iterNum2Begin );
iterNum2Begin++;
}
}
else if (iterNum1Begin == iterNum1End )
{
vNum.push_back (*iterNum2Begin );
iterNum2Begin++;
}
else if (iterNum2Begin == iterNum2End )
{
vNum.push_back (*iterNum1Begin );
iterNum1Begin++;
}
if (iSize % 2 == 0 && i == iSize / 2)
return (vNum [iSize / 2 ] + vNum [iSize / 2 - 1 ]) / 2.0;
else if (i == iSize / 2)
return vNum [iSize / 2 ];
}
}
};