| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {
 if (nums1 == null || nums2 == null) {
 return 0;
 }
 int total = nums1.length + nums2.length;
 if (total % 2 == 0) {
 return (findKth(nums1, nums2, 0, 0, total / 2) + findKth(nums1, nums2, 0, 0, total / 2 + 1)) / 2.0;
 } else {
 return findKth(nums1, nums2, 0, 0, total / 2 + 1);
 }
 }
 
 private int findKth(int[] nums1, int[] nums2, int start1, int start2, int k) {
 if (start1 >= nums1.length) {
 return nums2[start2 + k - 1];
 }
 if (start2 >= nums2.length) {
 return nums1[start1 + k - 1];
 }
 if (k == 1) {
 return Math.min(nums1[start1], nums2[start2]);
 }
 int val1 = start1 + k / 2 - 1 < nums1.length ? nums1[start1 + k / 2 - 1] : Integer.MAX_VALUE;
 int val2 = start2 + k / 2 - 1 < nums2.length ? nums2[start2 + k / 2 - 1] : Integer.MAX_VALUE;
 if (val1 < val2) {
 return findKth(nums1, nums2, start1 + k / 2, start2, k - k / 2);
 } else {
 return findKth(nums1, nums2, start1, start2 + k / 2, k - k / 2);
 }
 }
 }
 
 |