两个有序数组 nums1 和 nums2,把 nums2 按大小放进 nums1。
Example:
-
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3 -
Output: [1,2,2,3,5,6]
解析:
如果让两个数组从头开始循环,那么插入 nums1 的时候插入的这个位置包括后面的所有数都要向后移一位,数组这样操作是麻烦的。
所以从后开始循环。
比较后大的那个数放在 nums1 末尾。
(The following English translation may not be right -.-)
analyze:
if we compares the item in the two arrays with loop from head to the end, it's so complex to insert the bigger num to the nums1, that means the all items behind the num have to move.
so it's should loop from the end to head, then put the bigger num in the nums1's end.
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
var merge = function(nums1, m, nums2, n) {
let i = m-1;
let j = n-1;
let k = nums1.length - 1;
while (i >= 0 && j >= 0) {
if (nums1[i] > nums2[j]) {
nums1[k] = nums1[i];
i--;
} else {
nums1[k] = nums2[j]
j--
}
k--;
}
// 当 nums2 比 nums1 长时
while (j >= 0) {
nums1[k--] = nums2[j--]
}
};
网友评论