前言:用的是JavaScript。一开始打算用冒泡排序的,但是想到时间复杂度可能会到O(m+n)^2,所以用了双指针法。不多说,看题:
给你两个按 非递减顺序 排列的整数数组
nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你 合并
nums2到nums1中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组
nums1中。为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。
合并数组没啥难的吧,注意不要用.length属性就行了,不然会把0算进去。
用双指针的另一个原因是原数组已经有序递增了,所以我们用双指针从数组末尾开始向前比较,把较大的元素放数组末尾就行了。哪个数组提前遍历完,说明另外一个数组已在正确位置,复制过去就行。
/**
* @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) {
let i=m-1,j=n-1,k=m+n-1;
while(i>=0&&j>=0){
if(nums1[i]>nums2[j]){
nums1[k]=nums1[i];
i--;
}else{
nums1[k]=nums2[j];
j--;
}
k--;
}
while(j>=0){
nums1[k]=nums2[j];
j--;
k--;
}
};
空间复杂度T(1),时间复杂度(M+N)。

3768

被折叠的 条评论
为什么被折叠?



