Skip to content

Commit 582ca91

Browse files
authored
Update 0004-median-of-two-sorted-arrays.rs
1 parent ac77c60 commit 582ca91

File tree

1 file changed

+7
-51
lines changed

1 file changed

+7
-51
lines changed

Diff for: rust/0004-median-of-two-sorted-arrays.rs

+7-51
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,12 @@
11
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);
85
}
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
5210
}
53-
54-
panic!("Arrays are not sorted");
5511
}
5612
}

0 commit comments

Comments
 (0)