Skip to content

Latest commit

 

History

History
80 lines (62 loc) · 1.71 KB

20220712.md

File metadata and controls

80 lines (62 loc) · 1.71 KB

Algorithm

4. Median of Two Sorted Arrays

Description

Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays.

The overall run time complexity should be O(log (m+n)).

Example 1:

Input: nums1 = [1,3], nums2 = [2]
Output: 2.00000
Explanation: merged array = [1,2,3] and median is 2.

Example 2:

Input: nums1 = [1,2], nums2 = [3,4]
Output: 2.50000
Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.

Constraints:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106

Solution

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int m = nums1.length, n = nums2.length;
        int l = (m+n+1)/2;
        int r = (m+n+2)/2;
        return (getKth(nums1,0,nums2,0,l)+getKth(nums1,0,nums2,0,r))/2.0;
    }
    public double getKth(int[] A, int aStart, int[] B, int bStart, int k){
        if(aStart>A.length-1){
            return B[bStart+k-1];
        }
        if(bStart>B.length-1){
            return A[aStart+k-1];
        }
        if(k==1){
            return Math.min(A[aStart],B[bStart]);
        }
        int aMid = Integer.MAX_VALUE, bMid = Integer.MAX_VALUE;
        if(aStart+k/2-1<A.length){
            aMid = A[aStart+k/2-1];
        }
        if(bStart+k/2-1<B.length){
            bMid = B[bStart+k/2-1];   
        }
        if(aMid<bMid){
            return getKth(A, aStart+k/2,B,bStart,k-k/2);
        }else{
            return getKth(A,aStart,B,bStart+k/2, k-k/2);
        }
    }
}

Discuss

Review

Tip

Share