题目

Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

Note: You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

标准的双指针合并

代码

public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int tail1 = m - 1, tail2 = n - 1;
int cursor = m + n - 1;
while (tail1 >= 0 || tail2 >= 0) {
int first = Integer.MIN_VALUE;
int second = Integer.MIN_VALUE;
if (tail1 >= 0) { first = nums1[tail1]; }
if (tail2 >= 0) { second = nums2[tail2]; }
if (first >= second) {
nums1[cursor--] = nums1[tail1--];
} else {
nums1[cursor--] = nums2[tail2--];
}
}
}
}


稍微优化

代码

public class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int tail1 = m - 1, tail2 = n - 1, cur = m + n - 1;
while (tail1 >= 0 && tail2 >= 0) {
if (nums1[tail1] >= nums2[tail2]) {
nums1[cur--] = nums1[tail1--];
} else {
nums1[cur--] = nums2[tail2--];
}
}
while (tail2 >= 0) { nums1[cur--] = nums2[tail2--]; }
}
}