题目
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
输入:nums1 = [0], m = 0, nums2 = [1], n = 1 输出:[1] 解释:需要合并的数组是 [] 和 [1] 。 合并结果是 [1] 。 注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。
题解
进入函数后先使用if
语句判断出参n
是否是0
,如果是0
则直接将出参nums1
直接返回出去的,因为我们所要做的操作是将出参nums2
合并到出参nums1
中,出参n
代表着出参nums2
的数据长度,如果出参nums2
中没有数据则没有合并的必要了,然后使用for
循环将当前出参nums1
使用pop
方法删除末尾出参n
位数,然后在使用for
循环结合push
方法,将出参nums2
中对应出参n
个数添加到出参nums1
中,最后在使用sort
方法对出参nums1
进行排序,将排序后的出参nums1
数组返回出去
/** * @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) { if(n === 0){ return nums1 } for(i = 0; i < n; i++) { nums1.pop() } for(j = 0; j < n; j++) { nums1.push(nums2[j]) } return nums1.sort((a,b) => a - b) };
我们还可以采用另一种方法实现,我们先使用for
循环将出参nums2
中的数通过splice
方法依次插入到出参nums1
末尾中,最后在用使用sort
方法对出参nums1
进行排序,最后将排序好的出参nums1
返回出去即可
var merge = function(nums1, m, nums2, n) { for(let i = 0; i <= n - 1; i++) { nums1.splice(nums1.length - 1 - i, 1, nums2[i]); } return nums1.sort((a, b) => a - b); };