// [1,2,3,0,0,0] 3 [2,5,6] 3 [1,2,2,3,5,6]
// [1] 1 [] 0 [1]
// [] 0 [1] 1 [1]
// 双指针从前向后合并
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
let mut m = m as usize;
let mut n = n as usize;
let mut i = (m + n) as usize - 1;
while m > 0 && n > 0 {
if nums1[m - 1] > nums2[n - 1] {
nums1[i] = nums1[m - 1];
m -= 1;
} else {
nums1[i] = nums2[n - 1];
n -= 1;
}
i -= 1;
}
while n > 0 {
nums1[i] = nums2[n - 1];
n -= 1;
i -= 1;
}
}
// 双指针从后向前合并
pub fn merge2(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
let mut i = 0;
let mut j = 0;
let mut result = Vec::new();
while i < m as usize && j < n as usize {
if nums1[i] <= nums2[j] {
result.push(nums1[i]);
i += 1;
} else {
result.push(nums2[j]);
j += 1;
}
}
while i < m as usize {
result.push(nums1[i]);
i += 1;
}
while j < n as usize {
result.push(nums2[j]);
j += 1;
}
nums1.clear();
nums1.append(&mut result);
}
fn main() {
// 根据 [1,2,3,0,0,0] 3 [2,5,6] 3 [1,2,2,3,5,6] 编写测试用例
let mut v1 = vec![1,2,3,0,0,0];
let mut v2 = vec![2,5,6];
let m = 3;
let n = 3;
merge(&mut v1, m, &mut v2, n);
assert_eq!(v1, vec![1,2,2,3,5,6]);
// 根据 [1,2,3,0,0,0] 3 [2,5,6] 3 [1,2,2,3,5,6] 编写测试用例
let mut v1 = vec![1,2,3,0,0,0];
let mut v2 = vec![2,5,6];
let mut m = 3;
let mut n = 3;
merge2(&mut v1, m, &mut v2, n);
assert_eq!(v1, vec![1,2,2,3,5,6]);
}