LeetCode 4. Median of Two Sorted Arrays

来源:互联网 发布:山东竞彩网络实体店 编辑:程序博客网 时间:2024/05/18 02:08

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 {    public double findMedianSortedArrays(int[] nums1, int[] nums2) {        int len1 = nums1.length;        int len2 = nums2.length;        if(len1==0){            if(len2%2==1){                return (double)nums2[len2/2];            }            else return ((double)nums2[(len2-1)/2]+nums2[len2/2])/2;        }        if(len2==0){            if(len1%2==1){                return (double)nums1[len1/2];            }            else return ((double)nums1[(len1-1)/2]+nums1[len1/2])/2;        }        int mid = (len1+len2-1)/2;        int midval1=0;        int midval2=0;        int i=0,j=0,k=0;        for(;i<mid;i++){            if(j==len1){                k++;            }            else if(k==len2||nums1[j]<=nums2[k]){                j++;            }            else{                k++;            }        }        if(j==len1){            midval1 = nums2[k];            midval2 = nums2[k+1];        }        else if(k==len2){            midval1 = nums1[j];            midval2 = nums1[j+1];        }        else{            midval1 = Math.min(nums1[j],nums2[k]);            int m=(nums1[j]<=nums2[k])?j++:k++;            if(j==len1) midval2=nums2[k];            else if(k==len2) midval2=nums1[j];            else midval2 = Math.min(nums1[j],nums2[k]);        }        if((len1+len2)%2==1) {            return (double)midval1;        }        else return ((double)midval1+midval2)/2;    }}
这个代码写的有点冗长,勉强看吧。。 思路就是对两个数组逐个比较计数到mid,如果两个数组长度和是偶数就还要看mid+1

0 0