leetcode 4、两个排序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 

请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。

code

class Solution {
public:
    double findMedianSortedArrays(vector<int>& a, vector<int>& b) {
        int m = a.size();int n = b.size();
        if(m>n){                      //m一定是短的数组的长度
            vector<int>temp = a; a=b; b=temp;
            int temp1 = m ;m = n; n =temp1;
        }
        
        
        int imin=0,imax=m;
        int half = (n+m+1)/2;        //注意不要写成(imin+imax+1)/2
        while(imin<=imax){
            int i = (imin+imax)/2;
            int j = half-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 = a[i-1]>b[j-1]?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 = a[i]>b[j]?b[j]:a[i];
                
                return (maxleft+minright)/2.0;
            }
        }
    }
    
};

猜你喜欢

转载自blog.csdn.net/kirito0104/article/details/81210153