public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len = nums1.length + nums2.length;
return 0.5 * findKthNumber(nums1, 0, nums2, 0, len/2 + 1) + 0.5 * findKthNumber(nums1, 0, nums2, 0, len/2);
return findKthNumber(nums1, 0, nums2, 0, len/2 + 1);
public int findKthNumber(int[] nums1, int index1, int[] nums2, int index2, int k) {
if (index1 >= nums1.length) {
return nums2[index2 + k - 1];
if (index2 >= nums2.length) {
return nums1[index1 + k - 1];
return Math.min(nums1[index1], nums2[index2]);
// 减一是因为k指的是k个元素,而数组是从0开始
int mid1 = index1 + mid >= nums1.length ? Integer.MAX_VALUE : nums1[index1 + mid];
int mid2 = index2 + mid >= nums2.length ? Integer.MAX_VALUE : nums2[index2 + mid];
return findKthNumber(nums1, index1 + k/2, nums2, index2, k - k/2);
return findKthNumber(nums1, index1, nums2, index2 + k/2, k - k/2);