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 @   BJFU-VTH  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示