4. Median of Two Sorted Arrays

Tags: BinarySearch


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)).
Example 1:
nums1 = [1, 3]
nums2 = [2]

The median is 2.0

Example 2:
nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

public class Solution {
    public int findkth(int A[], int startA, int endA, int B[], int startB, int endB, int k){
        if(endA-startA > endB-startB){
            return findkth(B, startB, endB, A, startA, endA, k);
        }
        if(endA <= startA){
            return B[startB + k - 1];
        }       
        if(k == 1){
            return Math.min(A[startA], B[startB]);
        }
        int ia = Math.min(endA - startA, k / 2);
        int ib = k - ia;
        if(A[startA + ia - 1] < B[startB + ib - 1]){
            return findkth(A, startA+ia, endA, B, startB, endB, ib);
        }else if(A[startA + ia - 1] > B[startB + ib - 1]){
            return findkth(A, startA, endA, B, startB+ib, endB, ia);
        }else{
            return A[startA + ia - 1];
        }
    }
    
    public double findMedianSortedArrays(int A[], int B[]) {
        int lenA = A.length;
        int lenB = B.length;
        
        if(((lenA + lenB)&1) == 0){
            return  (findkth(A, 0, lenA, B, 0, lenB, (lenA+lenB)/2) +
                    findkth(A, 0, lenA, B, 0, lenB, (lenA+lenB)/2+1))/2.0;
        }else{
            return  findkth(A, 0, lenA, B, 0, lenB, (lenA+lenB+1)/2);
        }           
    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容