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

题目:

给你两个按 非递减顺序 排列的整数数组 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,3 和 2,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
};
相关推荐
一去不复返的通信er6 小时前
排序 + 双指针:力扣15三数之和
算法·leetcode
文丑颜不良啊7 小时前
LeetCode1901~1920题目解析
java·leetcode
Pniubi7 小时前
力扣3无重复字符的最长字串(滑动窗口)
算法·leetcode·职场和发展
On The Road :7 小时前
深入理解 JVM 垃圾回收:GC 是什么、如何判定垃圾、四大回收算法全解析
jvm·算法
微尘hjx8 小时前
【Deep-OC-SORT 03】多轨迹算法Deep-OC-SORT-卡尔曼滤波预测过程
算法·yolo·目标跟踪·ultralytics·车跟踪·轨迹算法·deep-oc-sort
老师我太想进步了202610 小时前
【数据结构-3】算法美学之降复杂度
数据结构·算法
机器人零零壹15 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
ZhengEnCi18 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是19 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考19 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习