首先,就是两个有序的数组进行遍历,遍历到一半即可。然后求出均值,下述是我的代码。但这明显是有问题的,具体错误的代码如下。计算复杂度太高了,O(n),所以会超时,具体代码如下 这说明一个问题,不能逐个遍历,只要遍历就一定有问题的,可以尝试一下对折寻找。    double  findMedianSortedArrays ( vector< int > &  nums1,  vector< int > &  nums2)  { double  numsLeft =  0 , numsRight =  0 ; int  len =  nums1. size ( )  +  nums2. size ( ) , index =  0 ; for ( int  i =  0 ,  j =  0 ;  i <=  nums1. size ( )  &&  j <=  nums2. size ( ) ; ) { if ( nums1[ i]  <  nums2[ j] ) numsLeft =  nums1[ i ++ ]  ; else numsLeft =  nums2[ j ++  ] ; if ( index ==  len /  2  - 1 )   numsLeft =  numsLeft; if ( index ==  len /  2 )  numsRight =  numsLeft; index ++ ; } if ( len %  2  ==  2 ) return  ( numsLeft +  numsRight ) /  2 ; else return  numsRight; } 
这里仅仅讲解二分法,只需要注意这里的k是在剩下的元素中,寻找第k小的数字即可 double  findMedianSortedArrays ( vector< int > &  nums1,  vector< int > &  nums2)  { int  tot =  nums1. size ( )  +  nums2. size ( ) ; if ( tot %  2  ==  0 ) { int  left =   find ( nums1, 0 , nums2, 0 , tot /  2 ) ; int  right =  find ( nums1, 0 , nums2, 0 , tot /  2  +  1 ) ; return  ( left +  right)  /  2.0 } else { return  find ( nums1, 0 , nums2, 0 , tot /  2  +  1 ) ; } 
} int  find ( vector< int >  nums1, int  i, vector< int >  nums2, int  j, int  k) { if ( nums1. size ( )  -  i >  nums2. size ( )  -  j)  return  find ( nums2, j, nums1, i, k) ; if  ( k ==  1 ) { if ( nums1. size ( )  ==  i)    return  nums2[ j] ; else  return  min ( nums1[ i] , nums2[ j] ) ; } if  ( nums1. size ( )  ==  i)  return  nums2[ j +  k -  1 ] ; int  si =  min ( ( int ) nums1. size ( ) , i +  k /  2 )  , sj =  j +  k -  k /  2 ; if ( nums1[ si -  1 ]  >  nums2[ sj -  1 ] ) return  find ( nums1, i, nums2, sj, k -  ( sj -  j) ) ; else return  find ( nums1, si, nums2, j, k- ( si -  i) ) ; 
} 
还是适合中午或者下午做算法题,不然太难受了,一个上午都是晕乎乎的。