力扣刷题:合并两个有序数组

题目:

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例 1:

输入:nums1 = 1,2,3,0,0,0, m = 3, nums2 = 2,5,6, n = 3

输出:1,2,2,3,5,6

解释:需要合并 1,2,32,5,6 。 合并结果是 ***1*** ,***2*** ,2,***3***,5,6,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = 1, m = 1, nums2 = \[\], n = 0

输出:1

解释:需要合并 1 和 \[\] 。

合并结果是 1

示例 3:

输入:nums1 = 0, m = 0, nums2 = 1, n = 1

输出:1

解释:需要合并的数组是 \[\] 和 1。 合并结果是 1 。 注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0仅仅是为了确保合并结果可以顺利存放到 nums1 中。

解析:

1 定义好两个数组的非零最后一个元素的下标index1和index2,以及第一个数组的最大下标tail

2 当 index1、index2 都大于 0 的时候,将 nums1index1、nums2index2中较大的元素放入 nums1tail,同时相应的下标往前移一位,注意也要 tail--

3 当 index1、index2 有一个小于 0 之后,将另一个数组依次插入到 nums1 中就行,最后返回 nums1 即为结果。

具体代码:

javascript 复制代码
/**
 * @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 index1 = m -1
    let index2 = n-1
    let tail = m + n -1
    while(index1>=0 && index2>=0){
        if(nums1[index1] > nums2[index2]){
            nums1[tail] = nums1[index1]
            index1--
        }else {
            nums1[tail] = nums2[index2]
            index2--
        }
        tail--
    }
    while(index1>=0){
        nums1[tail] = nums1[index1]
        index1--
        tail--
    }
    while(index2>=0){
        nums1[tail] = nums2[index2]
        index2--
        tail--
    }
    return nums1
};
相关推荐
Omics Pro26 分钟前
首个!外源天然产物综合性代谢图谱
数据库·人工智能·算法·机器学习·r语言
JAVA社区26 分钟前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
voidmort34 分钟前
3. 微调(Fine-tuning)与强化学习(RL)的核心思想
python·深度学习·算法
人道领域1 小时前
【LeetCode刷题日记】669.修剪二叉搜索树
开发语言·python·算法
QiLinkOS2 小时前
【从实验室到商业战场:发明专利如何重塑科技与企业的共生生态】
大数据·c语言·数据结构·c++·人工智能·单片机·算法
小白兔奶糖ovo3 小时前
【Leetcode】231. 2的幂
linux·算法·leetcode
xiaoxiaoxiaolll3 小时前
《Light: Science & Applications》合并BIC实现80倍阈值单模运行:超紧凑光子晶体激光器新突破
人工智能·算法·机器学习
Peter·Pan爱编程3 小时前
14. Lambda 表达式:随手可写的函数对象
c++·算法·ai编程
-To be number.wan3 小时前
算法日记 | 暴力枚举
学习·算法
s_w.h3 小时前
【 linux 】动静态库的制作
linux·运维·服务器·算法·bash