题目:
难度:Easy
相关话题:数组
、双指针
给定两个有序整数数组nums1 和 nums2 ,将 nums2 合并到nums1 中, 使得num1 成为一个有序数组。
说明:
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
思路:
归并排序的merge
,但是由于需要原地修改,先将nums1
的值往后移动直到边界,以避免覆盖;
例如:[1,2,3,4,0,0]
,移动后变为[1,2,1,2,3,4]
,移动后前2位[1,2]
,就可以覆盖不影响后续merge
。
/**
* @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
* @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
* @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) {
for(let i=m-1;i>=0;i--){
nums1[i+n]=nums1[i]
}
let i=n,j=0,id=0
while(i<m+n || j<n){
if(i===m+n) nums1[id]=nums2[j++]
else if(j===n) nums1[id]=nums1[i++]
else if(nums1[i]<nums2[j]) nums1[id]=nums1[i++]
else if(nums1[i]>=nums2[j]) nums1[id]=nums2[j++]
id++
}
};
扩展阅读: