File tree Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn find_median_sorted_arrays ( mut nums1 : Vec < i32 > , mut nums2 : Vec < i32 > ) -> f64 {
3
+ let total = nums1. len ( ) + nums2. len ( ) ;
4
+ let half = total / 2 ;
5
+
6
+ if nums1. len ( ) > nums2. len ( ) {
7
+ std:: mem:: swap ( & mut nums1, & mut nums2) ;
8
+ }
9
+
10
+ let mut left = 0 ;
11
+ let mut right = nums1. len ( ) ;
12
+
13
+ while left <= right {
14
+ let mid = left + ( right - left) / 2 ;
15
+ let pointer = half - mid;
16
+
17
+ let base_left = if mid > 0 {
18
+ nums1[ mid - 1 ] as f64
19
+ } else {
20
+ f64:: MIN
21
+ } ;
22
+
23
+ let base_right = if mid < nums1. len ( ) {
24
+ nums1[ mid] as f64
25
+ } else {
26
+ f64:: MAX
27
+ } ;
28
+
29
+ let ref_left = if pointer > 0 {
30
+ nums2[ pointer - 1 ] as f64
31
+ } else {
32
+ f64:: MIN
33
+ } ;
34
+
35
+ let ref_right = if pointer < nums2. len ( ) {
36
+ nums2[ pointer] as f64
37
+ } else {
38
+ f64:: MAX
39
+ } ;
40
+
41
+ if base_left <= ref_right && ref_left <= base_right {
42
+ if total % 2 == 1 {
43
+ return base_right. min ( ref_right) ;
44
+ } else {
45
+ return ( base_left. max ( ref_left) + base_right. min ( ref_right) ) / 2.0 ;
46
+ }
47
+ } else if base_left > ref_right {
48
+ right = mid - 1 ;
49
+ } else {
50
+ left = mid + 1 ;
51
+ }
52
+ }
53
+
54
+ panic ! ( "Arrays are not sorted" ) ;
55
+ }
56
+ }
You can’t perform that action at this time.
0 commit comments