Median of Two Sorted Arrays

public class Solution {
    public double findMedianSortedArrays(int A[], int B[]) {
        int sumOfLen = A.length + B.length;
        return sumOfLen % 2 == 1 
        ? recFindK(A, B, 0, A.length - 1, 0, B.length - 1, sumOfLen / 2 + 1) 
        : (recFindK(A, B, 0, A.length - 1, 0, B.length - 1, sumOfLen / 2) 
        	+ recFindK(A, B, 0, A.length - 1, 0, B.length - 1, sumOfLen / 2 + 1)) / 2;
    }
    
    // kth element of the merged (cut) arrays
    // lowX, highX are all inclusive
    // By default, the effective size of array A is not greater than array B
    private double recFindK(int A[], int B[], int lowA, int highA, int lowB, int highB, int k) {
        // Base cases
        if(highA - lowA > highB - lowB) {
            return recFindK(B, A, lowB, highB, lowA, highA, k);
        }
        if(lowA == highA + 1) {
            return B[lowB + k - 1];
        }
        if(k == 1) {
            return Math.min(A[lowA], B[lowB]);
        }
        // Recursion
        int a = Math.min(k / 2, highA - lowA + 1), b = k - a;
        if(A[lowA + a - 1] == B[lowB + b - 1]) {
            return A[lowA + a - 1];
        } else if(A[lowA + a - 1] < B[lowB + b - 1]) {
            return recFindK(A, B, lowA + a, highA, lowB, highB, k - a);
        } else {
            return recFindK(A, B, lowA, highA, lowB + b, highB, k - b);
        }
    }
}


Time: O(log(m + n))

Space: O(log(m + n))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值