美文网首页
Leetcode系列之链表(16)

Leetcode系列之链表(16)

作者: FisherTige_f2ef | 来源:发表于2019-10-29 21:34 被阅读0次

    题目:

    有两个大小分别为m和n的有序数组A和B。请找出这两个数组的中位数。你需要给出时间复杂度在O(log (m+n))以内的算法。

    思路:

    1.使用数组的归并不能满足时间复杂度的要求

    2.采用分治思想

    3.关键在于优化算法以满足时间复杂度

    代码:

    public class Solution {

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

            if(A.length > B.length){

                return findMedianSortedArrays(B, A);

            }

            int cut1=0;

            int cut2=0;

            int len = A.length+B.length;

            int cutL = 0;

            int cutR = A.length;

            while(cut1 <=A.length){

                cut1 = (cutR-cutL)/2 + cutL;

                cut2 = len/2 - cut1;

                double left1 = (cut1==0)?Integer.MIN_VALUE:A[cut1-1];

                double left2 = (cut2==0)?Integer.MIN_VALUE:B[cut2-1];

                double right1 = (cut1==A.length)?Integer.MAX_VALUE:A[cut1];

                double right2 = (cut2==B.length)?Integer.MAX_VALUE:B[cut2];

                if(left1 > right2){

                    cutR = cut1 -1;

                }else if(left2 > right1){

                    cutL = cut1+1;

                }else{

                    if(len % 2 == 0){

                        left1 = left1 > left2 ? left1:left2;

                        right1 = right1 > right2 ? right2 : right1;

                        return ( left1 + right1 )/2;

                    }else{

                        right1 = (right1 > right2 ? right2 : right1);

                        return right1;

                    }

                }

            }

            return -1;

        }

    }

    相关文章

      网友评论

          本文标题:Leetcode系列之链表(16)

          本文链接:https://www.haomeiwen.com/subject/auewvctx.html