美文网首页
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)

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

  • Swap Nodes in Pairs

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Swap Nodes in ...

  • Remove Nth Node From End of List

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Remove Nth Nod...

  • Merge k Sorted Lists

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Merge Two Sort...

  • Leetcode系列之链表(14)

    题目: 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5...

  • Leetcode系列之链表(15)

    题目: 给定两个代表非负数的链表,数字在链表中是反向存储的(链表头结点处的数字是个位数,第二个结点上的数字是百位数...

  • Leetcode系列之链表(13)

    题目: 合并k个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。 思路: 典型的多路归并问题 代码...

  • Leetcode系列之链表(9)

    题目: 将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的 思路: 普通的排序问题,难...

  • Leetcode系列之链表(10)

    题目: 将给定的链表向右转动k个位置,k是非负数。 例如: 给定1->2->3->4->5->null , k=2...

  • Leetcode系列之链表(11)

    题目: 将给出的链表中的节点每k个一组翻转,返回翻转后的链表 如果链表中的节点数不是k的倍数,将最后剩下的节点保持...

网友评论

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

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