88. 合并两个有序数组

思路:

题目要求了时间复杂度是O(n+m),没有要求空间复杂度。

所以可以先开一个数组,遍历O(n+m)生成一个新数组,然后把新数组的值复制给nums1即可。(代码一)

当然,也可以从后往前遍历,谁大谁放在n+m处,然后指针往前移动即可。(代码二)

 

代码一:

 1 /**
 2      * @param {number[]} nums1
 3      * @param {number} m
 4      * @param {number[]} nums2
 5      * @param {number} n
 6      * @return {void} Do not return anything, modify nums1 in-place instead.
 7      */
 8     var merge = function(nums1, m, nums2, n) {
 9         let mem = [], i = 0, j = 0;
10         while(i < m && j < n){
11             if(nums1[i] <= nums2[j]){
12                 mem.push(nums1[i++]);
13             }else{
14                 mem.push(nums2[j++]);
15             }
16         }
17         while(i < m){
18             mem.push(nums1[i++]);
19         }
20         while(j < n){
21             mem.push(nums2[j++]);
22         }
23         for(let i = 0; i < m+n; i++){
24             nums1[i] = mem[i];
25         }
26     };

 

代码二:

 1 var merge = function(nums1, m, nums2, n) {
 2         let totalPtr = m+n-1, nums1Ptr = m-1, nums2Ptr = n-1;
 3         while(nums1Ptr >= 0 && nums2Ptr >= 0 && totalPtr >= 0){
 4             if(nums1[nums1Ptr] >= nums2[nums2Ptr]){
 5                 nums1[totalPtr--] = nums1[nums1Ptr--];
 6             }else{
 7                 nums1[totalPtr--] = nums2[nums2Ptr--];
 8             }
 9         }
10         while(nums1Ptr >= 0){
11             nums1[totalPtr--] = nums1[nums1Ptr--];
12         }
13         while(nums2Ptr >= 0){
14             nums1[totalPtr--] = nums2[nums2Ptr--];
15         }
16     };

 

posted @ 2022-04-08 13:31  BJFU-VTH  阅读(33)  评论(0编辑  收藏  举报