[LeetCode]4. Median of Two Sorted Arrays 中文 - YouTube
依赖merge sort和priorityqueue的废物
正式变身山景城一姐小迷妹✪ω✪
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len1= nums1.length;
int len2 = nums2.length;
int len = len1 + len2;
if(len1 > len2) { // 始终保持nums1为小数组
return findMedianSortedArrays(nums2, nums1);
}
if(len1 == 0) {
int mid = len2 / 2;
return (len2 % 2 != 0) ? (double) nums2[mid] : (nums2[mid - 1] + nums2[mid]) / 2.0;
}
int start1 = 0;
int end1 = len1;
int cut1 = 0;
int cut2 = 0;
while(start1 <= end1) {
cut1 = (start1 + end1) / 2;
cut2 = (len + 1) / 2 - cut1; // 保证len为奇数时,从cut1和cut2的分界线左边取值
double l1 = (cut1 == 0) ? Integer.MIN_VALUE : nums1[cut1 - 1];
double l2 = (cut2 == 0) ? Integer.MIN_VALUE : nums2[cut2 - 1];
double r1 = (cut1 == len1) ? Integer.MAX_VALUE : nums1[cut1];
double r2 = (cut2 == len2) ? Integer.MAX_VALUE : nums2[cut2];
if(l1 > r2) {
end1 = cut1 - 1;
}
else if(r1 < l2) {
start1 = cut1 + 1;
}
else {
if(len % 2 != 0) {
return Math.max(l1, l2);
}
else {
return (Math.max(l1, l2) + Math.min(r1, r2)) / 2.0;
}
}
}
return -1;
}
}