【leetcode】Median of Two Sorted Arrays

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)).

思路:

将求解转换为求第k小元素的问题

代码

double findKthArrays(int* a1,int m,int* a2,int n,int k) {
    //m<=n
    if(m>n)return findKthArrays(a2,n,a1,m,k);
    if(m==0)return a2[k-1];
    if(k==1)return min(a1[0],a2[0]);
    int pa=min(k/2,m),pb=k-pa;
    if(a1[pa-1]<a2[pb-1])return findKthArrays(a1+pa,m-pa,a2,n,k-pa);
    else if(a1[pa-1]>a2[pb-1])return findKthArrays(a1,m,a2+pb,n-pb,k-pb);
    else return a1[pa-1];
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
    int m=nums1.size();
    int n=nums2.size();
    int k=m+n;
    if(k&1)
    {
        return findKthArrays(&nums1[0],m,&nums2[0],n,(k+1)/2);
    }else
    {
        return ((double)findKthArrays(&nums1[0],m,&nums2[0],n,k/2)+(double)findKthArrays(&nums1[0],m,&nums2[0],n,k/2+1))/2.0;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值