No.60 - LeetCode4 - 两个排序数组找第K位数 - 很难

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值