Leetcode-Median of Two Sorted Arrays
题目描述
There are two sorted arrays A and B 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)).
AC代码
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
using namespace std;
double findKth(int A[], int m, int B[], int n, int k)
{
if(m > n)
return findKth(B,n,A,m,k);
if(m == 0)
return B[k - 1];
if(k <= 1)
return min(A[0], B[0]);
int pa = min(k / 2, m), pb = k - pa;
if(A[pa - 1] < B[pb - 1])
return findKth(A + pa, m - pa, B, n, k - pa);
else if(A[pa - 1] > B[pb - 1])
return findKth(A, m, B + pb, n - pb, k - pb);
else
return A[pa - 1];
}
double findMedianSortedArrays(int A[], int m, int B[], int n)
{
int k = m + n;
if(k & 0x1)
return findKth(A, m, B, n, k / 2 + 1);
else
return (findKth(A, m, B, n, k / 2) + findKth(A, m, B, n, k / 2 + 1)) / 2;
}
int main()
{
#ifndef ok
freopen("in4.in", "r", stdin);
freopen("std4.out", "w", stdout);
#endif
int m;
cin>>m;
int A[m];
for(int i = 0; i < m; i++)
cin>>A[i];
int n;
cin>>n;
int B[n];
for(int j = 0; j < n; j++)
cin>>B[j];
// cout<<(float)findMedianSortedArrays(A, m, B, n)<<endl;
printf("%.5f\n", findMedianSortedArrays(A, m, B, n));
#ifndef ok
fclose(stdin);
fclose(stdout);
#endif
return 0;
}