合并两个有序数组
解题思路
nums、nums2有序,吧nums2全部合并到nums1,则合并后的nums1长度为m+n
从下标m+n-1的位置填充nums1,比较nums1[len1] 与nums2[len2]的大小,大值写入nums1[len[]
即 nums1[len1] >= nums2[len2] ,nums1[len--] = nums1[len1--],由于写入成功以后,下标自动减一,继续往前比较
否则nums1[len--] = nums2[len2--]
边界条件是
若 len1 < 0 即len >= 0 此时nums1已重新写入,nums2还未合并完,仅仅将需要的nums2的剩余的元素(0...len)写入nums2,写入后合并完成
若len2 < 0 此时nums2已经全部合并到了nums1合并完成
const merge = function(nums1, nums2, m, n) {
let len1 = m-1, len2 = n - 1, len = m + n -1;
while(len2 > 0) {
if(len1 < 0) {
nums1[len--] = nums2[len2--]
continue
}
nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--]
}
}