合并两个有序数组
方式一: 双指针 (从前到后)+ 拷贝
- 时间复杂度:O(m+n)
- 空间复杂度:O(m+n)
var merge = function(nums1, m, nums2, n) {
let temp = [...nums1];
for(let i = 0; i< n;i++){
temp[i+m] = nums2[i]
}
let p = 0;
let i = 0;
let j = m;
while(p<nums1.length){
if(i == m){
nums1[p] = temp[j++]
}else if(j == m+n){
nums1[p] = temp[i++]
}else if(temp[i] <= temp[j]){
nums1[p] = temp[i];
i++;
}else if(temp[i]>temp[j]){
nums1[p] = temp[j++]
}
p++;
}
return nums1;
};
方式二(优化):逆向双指针 ⭐️⭐️
var merge = function(nums1, m, nums2, n) {
let i = m-1;
let j = n-1;
let p = (m+n)-1;
while(i>=0 && j>=0){
if(nums1[i] < nums2[j]){
nums1[p] = nums2[j];
j--;
}else if(nums1[i] >= nums2[j]){
nums1[p] = nums1[i];
i--;
}
p--;
}
while(j>=0){
nums1[p] = nums2[j];
j--;
p--;
}
};