【数据结构OJ题】合并两个有序数组

原题链接:https://leetcode.cn/problems/merge-sorted-array/

目录

[1. 题目描述](#1. 题目描述)

[2. 思路分析](#2. 思路分析)

[3. 代码实现](#3. 代码实现)


1. 题目描述

2. 思路分析

看到这道题,我们注意到nums1 和nums2 两个数组都是非递减的。所以我们很容易想到额外开一个数组tmp ,依次比较两个数组的元素,每次取小的尾插到新数组tmp 即可。但是这需要额外再开空间。

也有一种方法是将这两个数组的元素都拷贝到一起,然后使用qsort排序 复杂度为O(NlogN)。

显然这两种方法的复杂度都不够优秀,是否有更好的方法呢?

我们可以**倒着比较,取大的依次往前插入。**等到有一个数组被遍历完,就结束。

因为两个数组都是非递减的,nums1 数组的长度比nums2 大,所以如果nums1 先被遍历完,就将nums2 没有被遍历的元素直接拷贝到nums1 前面。

如果nums2 先被遍历完,则不用额外操作(因为nums1 整体本身就是非递减的,所以那些没有被遍历到的元素也是按非递减排列的)。

流程演示:

3. 代码实现

cpp 复制代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
    int end1 = m - 1, end2 = n - 1, end = m + n - 1;
    while (end1 >= 0 && end2 >= 0)
    {
        if (nums1[end1] >= nums2[end2])
            nums1[end--] = nums1[end1--];
        else
            nums1[end--] = nums2[end2--];
    }
    while (end2 >= 0)
        nums1[end--] = nums2[end2--];
}
相关推荐
OpenApi.cc11 小时前
神经网络结构驱动+数据结构分析
数据结构·人工智能·神经网络
菜菜的顾清寒11 小时前
力扣HOT100(42)链表-随机链表的复制
算法·leetcode·链表
lqqjuly12 小时前
模型剪枝与稀疏化:理论、算法与可运行实现
人工智能·算法·剪枝
逻辑君12 小时前
Foresight研究报告【20260011】
人工智能·线性代数·算法·矩阵
珊瑚里的鱼12 小时前
【动态规划】不同路径Ⅱ
算法·动态规划
星恒随风12 小时前
C语言数据结构排序算法详解(下):冒泡排序、快速排序、归并排序和计数排序
c语言·数据结构·笔记·学习·排序算法
适应规律13 小时前
【无标题】
人工智能·python·算法
Rain50913 小时前
mini-cc 的 MCP 协议:给 AI 装个 USB-C 接口
c语言·开发语言·前端·人工智能·架构·node.js·ai编程
蒟蒻的贤13 小时前
关于文法G2算符优先分析的一个坑
算法
变量未定义~13 小时前
单调栈、单调队列(模板)、子矩阵、连通块中点的数量、堆箱子(4星)
算法