class Solution { // 本题采用折半删除法 public double findMedianSortedArrays(int[] nums1, int[] nums2) { int k = nums1.length + nums2.length; if(k % 2 == 0) { return (double)(findKth(nums1,0,nums2,0,k/2) + findKth(nums1,0,nums2,0,k/2 + 1)) / 2; } return (double)findKth(nums1,0,nums2,0,k/2 + 1); } // l1指向nums1 l2指向nums2 k代表找到第几个数 每次删 k/2个数 public int findKth(int[] nums1, int l1, int[] nums2, int l2, int k) { if(l1 >= nums1.length) return nums2[l2 + k - 1]; if(l2 >= nums2.length) return nums1[l1 + k - 1]; if(k == 1) return Math.min(nums1[l1],nums2[l2]); int num1 = l1 + k / 2 - 1 >= nums1.length ? Integer.MAX_VALUE : nums1[l1 + k / 2 - 1]; int num2 = l2 + k / 2 - 1 >= nums2.length ? Integer.MAX_VALUE : nums2[l2 + k / 2 - 1]; if(num1 < num2) { // 每次删除较小的那一边 return findKth(nums1,l1 + k / 2, nums2, l2, k - k / 2); } return findKth(nums1,l1, nums2, l2 + k / 2, k - k / 2); } }