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); } }