@@ -31,10 +31,27 @@ pub struct Solution {}
31
31
// submission codes start here
32
32
33
33
// TODO: nth slice
34
+ use std:: rc:: Rc ;
34
35
impl Solution {
35
36
pub fn find_median_sorted_arrays ( nums1 : Vec < i32 > , nums2 : Vec < i32 > ) -> f64 {
36
- 1.0
37
+ let ( lhs, rhs) = if nums1. len ( ) >nums2. len ( ) { ( Rc :: new ( nums2) , Rc :: new ( nums1) ) } else { ( Rc :: new ( nums1) , Rc :: new ( nums2) ) } ;
38
+ let ( n, m) = ( Rc :: clone ( & lhs) . len ( ) , Rc :: clone ( & rhs) . len ( ) ) ;
39
+ let ( mut lmax1, mut rmin1, mut lmax2, mut rmin2) = ( 0 , 0 , 0 , 0 ) ;
40
+ let ( mut lo, mut hi) = ( 0 , n* 2 ) ;
41
+ while lo <= hi{
42
+ let c1 = ( lo+hi) /2 ;
43
+ let c2 = m+n-c1;
44
+ lmax1 = if c1==0 { i32:: min_value ( ) } else { Rc :: clone ( & lhs) [ ( c1-1 ) /2 ] } ;
45
+ rmin1 = if c1==2 * n{ i32:: max_value ( ) } else { Rc :: clone ( & lhs) [ c1/2 ] } ;
46
+ lmax2 = if c2==0 { i32:: min_value ( ) } else { Rc :: clone ( & rhs) [ ( c2-1 ) /2 ] } ;
47
+ rmin2 = if c2==2 * m{ i32:: max_value ( ) } else { Rc :: clone ( & rhs) [ c2/2 ] } ;
48
+
49
+ if lmax1>rmin2{ hi=c1-1 }
50
+ else if lmax2>rmin1{ lo = c1+1 }
51
+ else { break }
37
52
}
53
+ ( std:: cmp:: max ( lmax1, lmax2) + std:: cmp:: min ( rmin1, rmin2) ) as f64 / 2.0
54
+ }
38
55
}
39
56
40
57
// submission codes end
0 commit comments