|
@@ -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]);
|
|
|
+ }
|
|
|
+}
|