There are two sorted arrays nums1 and nums2 of size m and n respectively.
1 public class Solution { 2 public double findMedianSortedArrays(int[] nums1, int[] nums2) { 3 int total = nums1.length + nums2.length; 4 if (total % 2 == 1) { 5 return findKth(nums1, 0, nums1.length, nums2, 0, nums2.length, total / 2 + 1); 6 } else { 7 return (findKth(nums1, 0, nums1.length, nums2, 0, nums2.length, total / 2) + findKth(nums1, 0, nums1.length, nums2, 0, nums2.length, total / 2 + 1)) * 1.0 / 2; 8 } 9 } 10 11 private int findKth(int[] n1, int s1, int len1, int[] n2, int s2, int len2, int K) { 12 if (len1 > len2) { 13 return findKth(n2, s2, len2, n1, s1, len1, K); 14 } 15 if (len1 == 0) { 16 return n2[s2 + K - 1]; 17 } 18 if (K == 1) { 19 return Math.min(n1[s1], n2[s2]); 20 } 21 int pa = Math.min(len1, K / 2); 22 int pb = K - pa; 23 if (n1[s1 + pa - 1] < n2[s2 + pb - 1]) { 24 return findKth(n1, s1 + pa, len1 - pa, n2, s2, len2, K - pa); 25 } else if (n1[s1 + pa - 1] > n2[s2 + pb - 1]) { 26 return findKth(n1, s1, len1, n2, s2 + pb, len2 - pb, pa); 27 } else { 28 return n1[s1 + pa - 1]; 29 } 30 } 31 }

浙公网安备 33010602011771号