【LeetCode 88】合并两个有序数组

网友投稿 588 2022-11-18

【LeetCode 88】合并两个有序数组

【LeetCode 88】合并两个有序数组

题目描述

给你两个有序整数数组 ​​nums1​​​ 和 ​​nums2​​​,请你将 ​​nums2​​​ 合并到 ​​nums1​​​ 中,使 ​​nums1​​ 成为一个有序数组。

说明:

初始化​​nums1​​​ 和​​nums2​​ 的元素数量分别为 m 和 n 。你可以假设​​nums1​​​ 有足够的空间(空间大小大于或等于 m + n)来保存​​nums2​​ 中的元素。

示例:

输入:nums1 = [1,2,3], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]

解题思路

首先看到这个题目,我们应该能想到使用双指针来解决这个问题。

首先把两个指针分别指向两个数组生效部分的尾部每次两个指针所指向的值进行对比,将较大的值放在nums1的后面,并往前填补

这就是实现该题的步骤,但是我们还需要考虑一个问题,就是我们不确定是哪个数组先遍历完,这会对最后的几个产生影响,那就只有两种情况:

nums1先执行完,那就意味着nums1的头部空出来了,直接把nums2放在nums1前面即可nums2先执行完,那本身就是再往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) { //初始化指针:i指向nums1的结尾,j指向nums2的结尾,k指向合并后的最后一位 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-- k-- }else{ nums1[k]=nums2[j] j-- k-- } } // 处理nums1先执行完的情况 while(j>=0){ nums1[k] = nums2[j] j-- k-- }};

提交结果

(很惊讶,内存消耗竟然超过了100%的用户~)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何快速将微信小程序转换成App?一种工具实操演示
下一篇:支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~