Browse Source

feat: merge sorted array

Zhang Li 1 year ago
parent
commit
f3aaa4f4ca
2 changed files with 56 additions and 0 deletions
  1. 55 0
      src/solutions/array/merge_sorted_array.rs
  2. 1 0
      src/solutions/array/mod.rs

+ 55 - 0
src/solutions/array/merge_sorted_array.rs

@@ -0,0 +1,55 @@
+struct Solution;
+
+
+
+impl Solution {
+    pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
+        if n == 0 { return }
+        if m == 0 {
+            for i in 0..nums2.len() {
+                nums1[i] = nums2[i];
+            }
+            return
+        }
+        let mut i = m-1;
+        let mut j = n-1;
+        let mut cur = m + n - 1;
+        while i >=0 && j >= 0 {
+            if nums1[i as usize] > nums2[j as usize] {
+                nums1[cur as usize] = nums1[i as usize];
+                i -= 1;
+            } else {
+                nums1[cur as usize] = nums2[j as usize];
+                j -= 1;
+            }
+            cur -= 1;
+        }
+        while i >= 0 {
+            nums1[cur as usize] = nums1[i as usize];
+            cur -=1 ;
+            i -= 1;
+        }
+        while j >= 0 {
+            nums1[cur as usize] = nums2[j as usize];
+            cur -= 1;
+            j -= 1;
+        }
+
+
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_merge() {
+        let mut nums1 = vec![1,2,3,0,0,0];
+        let m = 3;
+        let mut nums2 = vec![2,5,6];
+        let n = 3;
+        Solution::merge(&mut nums1, m, &mut nums2, n);
+        assert_eq!(nums1, vec![1,2,2,3,5,6]);
+    }
+}

+ 1 - 0
src/solutions/array/mod.rs

@@ -7,3 +7,4 @@ mod remove_element;
 mod trapping_train_water;
 mod sort_colors;
 mod remove_duplicate_from_sorted_array2;
+mod merge_sorted_array;