4. Median of Two Sorted Arrays
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
Given two sorted arrays nums1
and nums2
of size m
and n
respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n))
.
视频讲解:
leetcode 4 寻找两个正序数组的中位数
Sunday, June 20, 2021
03:05
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
·//令nums1是更短的那个数组
if(nums1.length>nums2.length){
int[] temp=nums1;
nums1=nums2;
nums2=temp;
}
int start=0;
int end=nums1.length;
boolean wholeIsEven=(nums1.length+nums2.length) % 2==0;
//[start,end)
while(true){
int partitionX=start+(end-start)/2;
int partitionY=(nums1.length+nums2.length)/2-partitionX;
int xLeftMax = (partitionX-1<0)? Integer.MIN_VALUE : nums1[partitionX-1];
int xRightMin = (partitionX>=nums1.length)? Integer.MAX_VALUE : nums1[partitionX];
int yLeftMax = (partitionY-1<0)? Integer.MIN_VALUE : nums2[partitionY-1];
int yRightMin = (partitionY>=nums2.length)? Integer.MAX_VALUE : nums2[partitionY];
//return情况 左边全小于右边
if(xLeftMax <= yRightMin && yLeftMax <= xRightMin){
if(wholeIsEven){
return (double)( Integer.max(xLeftMax, yLeftMax) + Integer.min(xRightMin,yRightMin) ) / 2;
}
else{
return (double)Integer.min(xRightMin,nums2[partitionY]);
}
}
//左边比右边大 左移
if(xLeftMax>yRightMin){
end=partitionX;
}
//左边比右边小 右移
if(yLeftMax>xRightMin){
start=partitionX+1;
}
}
}
}