Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
The number of elements initialized in nums1 and nums2 are m and n respectively.
You may assume that nums1 has enough space
(size that is greater or equal to m + n) to hold additional elements from nums2.
input: 給兩個已經排序好的 Array
output: 合併成一個排好的大 Array,而且不能用額外空間
Example:
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
/**
* @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) {}
Edge Case
只有一個值的情況例如 [0] 0, [1], 1 or [1], 1, [0], 0
怎麼解
給定 m、n 代表一開始就會知道 nums1.length = m+ n = pointer
既然都排序好所以我會從後面出發
nums1[m] > nums2[n]: nums1[pointer] = nums1[m]
nums1[m] < nums2[n]: nums1[pointer] = nums2[n]
var merge = function(nums1, m, nums2, n) {
let pointer = m + n;
m --;
n --;
// 從最後比
while(pointer > 0 ){
pointer --;
if(n < 0 || nums1[m] > nums2[n]){
nums1[pointer] = nums1[m]
m --;
}else{
nums1[pointer] = nums2[n];
n -- ;
}
}
return nums1;
};
// aster than 23.03%