Skip to content

Commit da32278

Browse files
committed
Added Merge Sorted Array
1 parent aa888de commit da32278

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ pub mod remove_duplicates_from_sorted_array_ii; // 80
5858
pub mod remove_duplicates_from_sorted_list_ii; // 82
5959
pub mod remove_duplicates_from_sorted_list; // 83
6060

61+
pub mod merge_sorted_array; // 88
62+
6163
pub mod reverse_linked_list_ii; // 92
6264

6365
pub mod validate_binary_search_tree; // 98
@@ -123,6 +125,8 @@ pub mod bulb_switcher; // 319
123125
pub mod coin_change; // 322
124126
pub mod number_of_connected_components_in_an_undirected_graph; // 323
125127

128+
pub mod reconstruct_itinerary; // 332
129+
126130
pub mod reverse_string; // 344
127131

128132
pub mod moving_average_from_data_stream; // 346

src/merge_sorted_array.rs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
struct Solution;
2+
3+
impl Solution {
4+
5+
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
6+
let m = m as usize;
7+
let n = n as usize;
8+
9+
if n == 0 { } // do nothing
10+
else if m == 0 {
11+
for i in 0..n {
12+
nums1[i] = nums2[i];
13+
}
14+
} else {
15+
let mut nums1_i = m-1;
16+
let mut nums2_i = n-1;
17+
let mut nums1_done = false;
18+
let mut nums2_done = false;
19+
20+
let total = m + n;
21+
22+
for i in 0..total {
23+
let index = total-i-1;
24+
if nums2_done {
25+
nums1[index] = nums1[nums1_i];
26+
if nums1_i == 0 { nums1_done = true; }
27+
else { nums1_i -= 1; }
28+
} else if nums1_done {
29+
nums1[index] = nums2[nums2_i];
30+
if nums2_i == 0 { nums2_done = true; }
31+
else { nums2_i -= 1; }
32+
} else {
33+
let num1 = nums1[nums1_i];
34+
let num2 = nums2[nums2_i];
35+
if num2 > num1 {
36+
nums1[index] = num2;
37+
if nums2_i == 0 { nums2_done = true; }
38+
else { nums2_i -= 1; }
39+
} else {
40+
nums1[index] = num1;
41+
if nums1_i == 0 { nums1_done = true; }
42+
else { nums1_i -= 1; }
43+
}
44+
}
45+
}
46+
}
47+
}
48+
49+
}
50+
51+
#[cfg(test)]
52+
mod tests {
53+
use super::Solution;
54+
55+
#[test]
56+
fn example_1() {
57+
let mut nums1 = vec![1,2,3,0,0,0];
58+
let m = 3;
59+
let mut nums2 = vec![2,5,6];
60+
let n = 3;
61+
Solution::merge(&mut nums1, m, &mut nums2, n);
62+
assert_eq!(nums1, vec![1,2,2,3,5,6]);
63+
}
64+
65+
#[test]
66+
fn example_2() {
67+
let mut nums1 = vec![1];
68+
let m = 1;
69+
let mut nums2 = vec![];
70+
let n = 0;
71+
Solution::merge(&mut nums1, m, &mut nums2, n);
72+
assert_eq!(nums1, vec![1]);
73+
}
74+
75+
}

0 commit comments

Comments
 (0)