4. Median of Two Sorted Arrays

public class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int l=(nums1.length+nums2.length+1)>>1;
        int r=(nums1.length+nums2.length+2)>>1;
        return (kthSmallest(nums1, 0, nums2, 0, l)+kthSmallest(nums1, 0, nums2, 0, r))/2.0;
    }
    private int kthSmallest(int[] nums1, int i, int[] nums2, int j, int k)
    {
        if(i>=nums1.length)
            return nums2[j+k-1];
        if(j>=nums2.length)
            return nums1[i+k-1];
        if(k==1)
            return Math.min(nums1[i], nums2[j]);
        
        int l=Math.min(k/2, nums1.length-i);
        int r=Math.min(k/2, nums2.length-j);
        
        if(nums1[i+l-1]<nums2[j+r-1])
            return kthSmallest(nums1, i+l, nums2, j, k-l);
        else
            return kthSmallest(nums1, i, nums2, j+r, k-r);
        
    }
}
  

 

posted @ 2017-09-21 12:34  Weiyu Wang  阅读(146)  评论(0编辑  收藏  举报