File tree 1 file changed +7
-51
lines changed
1 file changed +7
-51
lines changed Original file line number Diff line number Diff line change 1
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) ;
2
+ pub fn find_median_sorted_arrays ( mut nums1 : Vec < i32 > , nums2 : Vec < i32 > ) -> f64 {
3
+ for val in nums2 {
4
+ nums1. insert ( nums1. binary_search ( & val) . unwrap_or_else ( |e| e) , val) ;
8
5
}
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
- }
6
+ if nums1. len ( ) %2 ==0 {
7
+ ( nums1[ ( nums1. len ( ) -1 ) / 2 ] + nums1[ nums1. len ( ) / 2 ] ) as f64 / 2.0
8
+ } else {
9
+ nums1[ ( nums1. len ( ) -1 ) / 2 ] as f64
52
10
}
53
-
54
- panic ! ( "Arrays are not sorted" ) ;
55
11
}
56
12
}
You can’t perform that action at this time.
0 commit comments