您的位置:首页 > 其它

LeetCode 4. Median of Two Sorted Arrays(两个有序数组的中位数)

2016-05-01 15:39 495 查看
原题网址:https://leetcode.com/problems/median-of-two-sorted-arrays/

There are two sorted arrays nums1 and nums2 of
size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

方法:采用二分法查找。

public class Solution {
private int median(int[] nums1, int[] nums2, int k) {
if (nums1.length == 0) return -1;
if (nums2.length == 0) return k;
int i=0, j=nums1.length-1;
while (i<=j) {
int m = (i+j)/2;
int n = k-m;
if (n < 0) j=m-1;
else if (n>nums2.length) i=m+1;
else if (n == nums2.length) {
if (nums2[n-1] <= nums1[m]) return m;
i=m+1;
} else if (n == 0) {
if (nums1[m] <= nums2
) return m;
j=m-1;
} else {
if (nums2[n-1] <= nums1[m] && nums1[m] <= nums2
) return m;
if (nums2[n-1] > nums1[m]) i=m+1;
if (nums1[m] > nums2
) j=m-1;
}
}
return -1;
}
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n = nums1.length+nums2.length;
if (n % 2 == 0) {
int m1 = median(nums1, nums2, n/2-1);
int median = 0;
if (m1 != -1) median = nums1[m1]; else median = nums2[median(nums2, nums1, (n-1)/2)];
int m2 = median(nums1, nums2, n/2);
if (m2 != -1) median += nums1[m2]; else median += nums2[median(nums2, nums1, n/2)];
return (double)median/2;
} else {
int m = median(nums1, nums2, (n-1)/2);
if (m != -1) return nums1[m];
return nums2[median(nums2, nums1, (n-1)/2)];
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: