您的位置:首页 > 其它

Median of Two Sorted Arrays

2015-06-09 16:45 239 查看
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)).

我的时间复杂度为O(n),其实仅为(m+n)/2

public class Solution {

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {

        int len1 = nums1.length, len2 = nums2.length;

    if(len1 == 0 && len2 == 0){

    return 0;

    }    

    int cou = len1 + len2;

    int median = 0;                           

    boolean isEven = false;

    if(cou % 2 == 1){

    median = cou/2+1;    

    }else{

    median = cou/2;

    isEven = true;

    }    

   
int i = 0, j = 0;
while(i+j < median-1){    

if(i < len1 && j < len2){
if(nums1[i] <= nums2[j]){
i++;
}else{
j++;
}
}else if(j < len2){
j++;
}else{
i++;
}
}

    if(isEven){

    if(i < len1 && j < len2){

    int i1 = 0, i2 = 0;

    if(nums1[i] < nums2[j]){

    i1 = nums1[i];

    if(i+1<len1){

    i2 = Math.min(nums1[i+1], nums2[j]);

    }else{

    i2 = nums2[j];

    }

    }else if(nums1[i] > nums2[j]){

    i1 = nums2[j];

    if(j+1 < len2){

    i2 = Math.min(nums1[i], nums2[j+1]);

    }else{

    i2 = nums1[i];

    }

    }else{

    i1 = nums1[i];

    i2 = nums2[j];

    }

    return (i2+i1)/2.0;    

    }else if(i < len1){

    return (nums1[i]+nums1[i+1])/2.0;

    }else{

    return (nums2[j]+nums2[j+1])/2.0;

    }

    }else{

    if(i < len1 && j < len2){

    return Math.min(nums1[i], nums2[j]);

    }else if(i < len1){

    return nums1[i];

    }else{

    return nums2[j];

    }

    }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: