题目
解答
从尾开始遍历,因为从头开始遍历需要移动元素,否则会将一些元素覆盖掉。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p = m - 1;
int q = n - 1;
int index = m + n - 1;
while (p >= 0 && q >= 0) {
if (nums1[p] > nums2[q]) {
nums1[index--] = nums1[p--];
} else {
nums1[index--] = nums2[q--];
}
}
// 因为是将元素放在nums1数组里,如果是q < 0,说明nums2的元素全放在了空位上,nums1的元素就不需要动了。
// 而如果p < 0,则说明nums2还有元素没有放入nums1中,则继续放入
if (p < 0) {
while (q >= 0) {
nums1[index--] = nums2[q--];
}
}
}
}