两个指针分别指向两个数组,每次比较后,小的右移。
两个数记录当前长度的中位数。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int i = 0, j = 0;
int N1 = nums1.size();
int N2 = nums2.size();
int left, right;
if(N1 == 0 || N2 == 0)
right = (N1==0? nums2[0]:nums1[0]);
while (i + j < (N1 + N2) / 2 && i < N1 && j < N2)
{
left = (nums1[i] < nums2[j] ? nums1[i] : nums2[j]);
if (nums1[i] <= nums2[j])
{
++i;
}
else
{
++j;
}
if (j >= N2)
{
right = nums1[i];
break;
}
if (i >= N1)
{
right = nums2[j];
break;
}
right = (nums1[i] < nums2[j] ? nums1[i] : nums2[j]);
}
while (i + j < (N1 + N2) / 2 && i < N1)
{
right = nums1[i];
++i;
left = right;
if(i<N1)
right = nums1[i];
}
while (i + j < (N1 + N2) / 2 && j < N2)
{
right = nums2[j];
++j;
left = right;
if(j<N2)
right = nums2[j];
}
if ((N1 + N2) % 2 == 0)
return (double)(left + right) / 2;
else
return right;
}
};