leetcode 0004寻找两个正序数组的中位数

leetcode0004 寻找两个正序数组的中位数

找出两个有序数组中的中位数
由于是有序,通过规定的复杂度很容易能猜出时二分的题目
但是由于一些边界问题,代码可以简单也可以复杂
如果把所有的边界问题,全部分类讨论那么本题就十分复杂
通过二分出第一个数组中的种位于中位数前面部分的个数来进行判断
这时的情况

  • 第一个数组前半部分为0
  • 第一个数组后半部分为0
  • 第二个数组后半部分为0
  • 第二个数组后半部分为0

都是很繁杂的判断,绕一会就晕了,我们办法将这些情况统一化
首先要保证第一个数组比第二数组长,方便之后进行判断,这里我们不能简单地swap,否则复杂度是不对的,可以先进行判断,然后再递归的调用solution的方法
然后在边界判断时,特殊处理边界为最大值或者最小值即可

class Solution {
public:
    double findMedianSortedArrays(vector& nums1, vector& nums2) {
        if(nums1.size()num2_MIN)
            {
                r=mid1-1;
            }
            else
            {
                ans1=max(num1_MAX,num2_MAX);
                ans2=min(num1_MIN,num2_MIN);
                l=mid1+1;
            }
        }
        if(sum%2==0) ans2=(ans1+ans2)/2.0;
        return ans2;
    }
};


你可能感兴趣的:(力扣,二分)