寻找两个有序数组的中位数

题目描述:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数

示例:nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5

在统计中,中位数被用来:将一个集合划分为两个长度相等的子集,其中一个子集中的元素总是大于另一个子集中的元素。

Java代码

class Solution {

    public double findMedianSortedArrays(int[] A, int[] B) {

        int m = A.length;

        int n = B.length;

        if(m>n) {

            int[] temp = A;A=B;B=temp;

            int tmp=m;m=n;n=tmp;

        }

        int iMin=0,iMax=m,halfLen=(m+n+1)/2;

        while(iMin<=iMax) {

            int i = (iMin+iMax)/2;

            int j = halfLen-i;

            if(i<iMax&&B[j-1]>A[i]) {

                iMin=i+1;

            }else if(i>iMin&&A[i-1]>B[j]) {

                iMax=i-1;

            }else{

                int maxLeft = 0;

                if(i==0) {maxLeft = B[j-1];}

                else if(j==0) {maxLeft=A[i-1];}

                else {maxLeft = Math.max(A[i-1],B[j-1]);}

                if((m+n)%2==1) {return maxLeft;}


                int minRight = 0;

                if(i==m){minRight=B[j];}

                else if(j==n) {minRight=A[i];}

                else{minRight=Math.min(B[j],A[i]);}

                return (maxLeft+minRight)/2.0;

            }

        }

        return 0.0;

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容