getKth函数是个模版,值得珍藏
class Solution {
public:
int getKth(int A[],int a,int B[],int b,int k){
if(a > b) return getKth(B,b,A,a,k); // 始终保持A比B短,保证a先为0
if(a==0) return B[k-1]; // 返回b的第k个
if(k==1) return min(A[0],B[0]); // 返回上中位数
int amid = min(a,k/2), bmid = min(b,k/2);
if(A[amid-1] < B[amid-1]) return getKth(A+amid,a-amid,B,b,k-amid);
else return getKth(A,a,B+bmid,b-bmid,k-bmid);
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int N = nums1.size();
int M = nums2.size();
int L = (N + M + 1)>>1; // 上中位数第L个
int R = (N + M + 2)>>1; // 下中位数第R个
// 保证没有空指针
if(N == 0 && M == 0) return 0;
if(N == 0) return (nums2[L-1]+nums2[R-1])/2.0;
if(M == 0) return (nums1[L-1]+nums1[R-1])/2.0;
return (getKth(&nums1[0],N,&nums2[0],M,L)+getKth(&nums1[0],N,&nums2[0],M,R))/2.0;
}
};