您的位置:首页 > 其它

Median of Two Sorted Arrays

2015-05-04 21:32 267 查看
package leetcode.xuyi;

import org.junit.Test;
/**
* Created by ethan on 2015/5/4.
*/
public class MedianOfTwoSortedArrays {
// 思路1: 由于时间复杂度限制在O(log(m+n)),只能使用二分法
// 其实这道题可以一般化到求最小的第n位数
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int len = nums1.length + nums2.length;
if ((len&0x1)==1)
return findMedian(nums1, 0, nums2, 0, len/2+1);
else
return (findMedian(nums1, 0, nums2, 0, len/2)+findMedian(nums1, 0, nums2, 0, len/2+1))/2.0;
}
public double findMedian(int[] nums1, int start1, int[] nums2, int start2,  int target){
// 判断参数
int len1 = nums1.length - start1;
int len2 = nums2.length - start2;
if (len1 > len2)
// return 关键字不能少啊。。。 调了一个小时啊,妈蛋
return findMedian(nums2, start2, nums1, start1, target);
if (len1 == 0) {
return nums2[start2 + target - 1];
}
if (target == 1){
return  Math.min(nums1[start1], nums2[start2]);
}
int pa = Math.min(target/2, len1);
int pb = target - pa;
if(nums1[start1+pa-1] < nums2[start2+pb-1]){
return findMedian(nums1, start1+pa, nums2, start2, target-pa);
}else  if (nums1[start1+pa-1] > nums2[start2+pb-1]){
return findMedian(nums1, start1, nums2, start2+pb, target-pb);
}else
return nums1[start1+pa-1];
}

// 思路2: 先排序,O(m+n) 显然不能满足O(log(m+n)的要求) 但是能Accepted
public double findMedianSortedArrays1(int[] nums1, int[] nums2) {
if (nums1.length == 0 && nums2.length==0)
return 0;
int cur_1 = 0;
int cur_2 = 0;
int[] ans = new int[nums1.length+nums2.length];
int index = 0;
while(cur_1< nums1.length && cur_2<nums2.length){
if (nums1[cur_1] < nums2[cur_2]){
ans[index++] = nums1[cur_1];
cur_1++;
}else {
ans[index++] = nums2[cur_2];
cur_2++;
}
}
while (cur_1< nums1.length){
ans[index++] = nums1[cur_1];
cur_1++;
}
while (cur_2< nums2.length){
ans[index++] = nums2[cur_2];
cur_2++;
}
int len = ans.length;
if (len%2 == 0)
return (ans[len/2] + ans[len/2-1])/2.0;
else
return ans[len/2];
}

@Test
public void test4(){
System.out.println(findMedianSortedArrays(new int[]{2}, new int[]{}));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Median of Two Sorted