【LeetCode】【HOT】4. 寻找两个正序数组的中位数
package hot;
public class Solution4 {
public static void main(String[] args) {
}
private double method(int[] nums1, int[] nums2){
if(nums1.length > nums2.length){
return method(nums2, nums1);
}
int m = nums1.length;
int n = nums2.length;
int left = 0;
int right = m;
int median1 = 0;
int median2 = 0;
while(left <= right){
int i = (left + right) / 2;
int j = (m + n + 1) / 2 - i;
int nums_im1 = (i == 0 ? Integer.MIN_VALUE : nums1[i-1]);
int nums_i = (i == m ? Integer.MAX_VALUE : nums1[i]);
int nums_jm1 = (j == 0 ? Integer.MIN_VALUE : nums2[j - 1]);
int nums_j = (j == n ? Integer.MAX_VALUE : nums2[j]);
if(nums_im1 <= nums_j){
median1 = Math.max(nums_im1, nums_jm1);
median2 = Math.min(nums_i, nums_j);
left = i + 1;
}else{
right = i - 1;
}
}
return (m + n) % 2 == 0 ? (median1 + median2) / 2.0 : median1;
}
}
//时间负载度为 O(logn)
//空间复杂度为 O(1)