给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
//思路 从后往前遍历 比较两个数组 尾部较大的哪个值, 谁的值大,
// 就把谁的值 放到num1的尾部, 然后向左移动 尾部索引 p
function marge(nums1, m, nums2, n){
let p1=m-1;
let p2=n-1;
// let p=m+n-1;
for (var p=m+n-1; p>=0;p--) {
if(p1>=0&&p2>=0){
if(nums1[p1]>=nums2[p2]){
nums1[p]=nums1[p1]
p1--
}else{
nums1[p]=nums2[p2]
p2--
}
}else if(p1>=0){
nums1[p]=nums1[p1]
p1--
}else if(p2>=0){
nums1[p]=nums2[p2]
p2--
}
}
return nums1
}
console.log(marge([1,2,3,7,0,0,0],4,[2,5,6],3))
下面是思路相同 但是写法更风骚的
关键字 Infinity
是无限大 -Infinity
就是无限小
var merge = function(nums1, m, nums2, n, l) {
l = m + n, m--, n--
while(l--) {
nums1[l] = (nums2[n] === undefined ? -Infinity : nums2[n]) >= (nums1[m] === undefined ? -Infinity : nums1[m]) ? nums2[n--] : nums1[m--]
}
};