观察可知,( extit{nums}_1) 的后半部分是空的,可以直接覆盖而不会影响结果。因此可以指针设置为从后向前遍历,每次取两者之中的较大者放进 ( extit{nums}_1) 的最后面。
/*
* @lc app=leetcode.cn id=88 lang=java
*
* [88] 合并两个有序数组
*/
// @lc code=start
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int index = m + n - 1;
int i = m - 1, j = n - 1;
while (i >= 0 && j >= 0) {
nums1[index--] = (nums1[i] > nums2[j] ? nums1[i--] : nums2[j--]);
}
while (j >= 0) {
nums1[index--] = nums2[j--];
}
}
}
// @lc code=end