Skip to content

Commit 277bd0a

Browse files
authoredAug 11, 2020
Merge pull request #16 from jtr109/88-merge-sorted-array
88 merge sorted array
2 parents 2ef9e97 + f357308 commit 277bd0a

File tree

5 files changed

+96
-0
lines changed

5 files changed

+96
-0
lines changed
 

Diff for: ‎Cargo.lock

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: ‎Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ members = [
77
"binary_tree_postorder_traversal",
88
"two_sum",
99
"implement_queue_using_stacks",
10+
"merge_sorted_array",
1011
]

Diff for: ‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Resolving problems of LeetCode in RustLang.
1010
* [1. Two Sum](./two_sum/src/lib.rs)
1111
* [7. Reverse Integer](./reverse_integer/src/lib.rs)
1212
* [15. 3 Sum](./three_sum/src/lib.rs)
13+
* [88. Merge Sorted Array](./merge_sorted_array/src/lib.rs)
1314
* [145. Binary Tree Postorder Traversal](./binary_tree_postorder_traversal/src/lib.rs)
1415
* [215. Kth Largest Element in an Array](./kth_largest/src/lib.rs)
1516
* [232. Implement Queue using Stacks](./implement_queue_using_stacks/src/lib.rs)

Diff for: ‎merge_sorted_array/Cargo.toml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "merge_sorted_array"
3+
version = "0.1.0"
4+
authors = ["Ryan Li <conbas2019@gmail.com>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]

Diff for: ‎merge_sorted_array/src/lib.rs

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*!
2+
* 88. Merge Sorted Array
3+
*
4+
* * [Problem link](https://leetcode.com/problems/merge-sorted-array/)
5+
*/
6+
7+
#![allow(dead_code)]
8+
9+
struct Solution {}
10+
11+
// ----------------------------------------------------------------------------
12+
13+
impl Solution {
14+
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
15+
let (mut i, mut length) = (0 as usize, m as usize);
16+
let mut j = 0 as usize;
17+
while j < n as usize {
18+
let n2 = nums2[j];
19+
if i >= length {
20+
// if all numbers in nums1 spent
21+
nums1[i] = n2;
22+
i += 1;
23+
length += 1;
24+
j += 1;
25+
continue;
26+
}
27+
if nums1[i] <= n2 {
28+
i += 1;
29+
} else {
30+
// insert n2
31+
let mut k = length;
32+
while k > i {
33+
nums1[k] = nums1[k - 1];
34+
k -= 1;
35+
}
36+
nums1[i] = n2;
37+
i += 1;
38+
length += 1;
39+
j += 1;
40+
}
41+
}
42+
}
43+
}
44+
45+
#[cfg(test)]
46+
mod tests {
47+
use super::*;
48+
49+
#[test]
50+
fn test_example() {
51+
let mut nums1 = vec![1, 2, 3, 0, 0, 0];
52+
let m = 3;
53+
let mut nums2 = vec![2, 5, 6];
54+
let n = 3;
55+
Solution::merge(&mut nums1, m, &mut nums2, n);
56+
let expected = vec![1, 2, 2, 3, 5, 6];
57+
assert_eq!(nums1, expected);
58+
}
59+
60+
#[test]
61+
fn test_example2() {
62+
let mut nums1 = vec![0];
63+
let m = 0;
64+
let mut nums2 = vec![1];
65+
let n = 1;
66+
Solution::merge(&mut nums1, m, &mut nums2, n);
67+
let expected = vec![1];
68+
assert_eq!(nums1, expected);
69+
}
70+
71+
#[test]
72+
fn test_example3() {
73+
let mut nums1 = vec![2, 0];
74+
let m = 1;
75+
let mut nums2 = vec![1];
76+
let n = 1;
77+
Solution::merge(&mut nums1, m, &mut nums2, n);
78+
let expected = vec![1, 2];
79+
assert_eq!(nums1, expected);
80+
}
81+
}

0 commit comments

Comments
 (0)