class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length,n = nums2.length;
int k1 = (m + n + 1) / 2;
int k2 = (m + n + 2) / 2;
return (findK(nums1,nums2,0,0,k1) + findK(nums1,nums2,0,0,k2)) / 2.0;
}
public int findK(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 mid1 = start1 + k / 2 - 1;
int mid2 = start2 + k / 2 - 1;
int midNum1 = (mid1 < nums1.length) ? nums1[mid1] : Integer.MAX_VALUE;
int midNum2 = (mid2 < nums2.length) ? nums2[mid2] : Integer.MAX_VALUE;
if(midNum1 > midNum2)
return findK(nums1,nums2,start1,start2 + k/2,k - k/2);
else
return findK(nums1,nums2,start1 + k/2,start2,k - k/2);
}
}
leetcode4. 寻找两个正序数组的中位数
最新推荐文章于 2024-10-17 10:27:13 发布