Leetcode刷题之合并两个有序数组

Leetcode刷题之合并两个有序数组

  • 一、题目描述
  • 二、题目解析

一、题目描述

给你两个按 非递减顺序 排列的整数数组 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 中。
在这里插入图片描述

二、题目解析

首先题目中,给了我们两个数组nums1和nums2。nums1和nums2是两个严格非递减的有序数组(也就是说除了递增,还有相等的情况)。我们需要将这两个数组合并成为一个新的数组,并将新的数组存放nums1数组当中。
在这里插入图片描述
那么我们如何进行合并操作呢?我们可以首先在每一个数组的元素末端位置,分别定义两个变量,取名叫end1和end2。并且在nums1数组的最后一个位置再次定义一个i变量。在这里插入图片描述
之后我们开始移动数据的位置。如果说,end2位置的数据大于end1数据位置的值时,我们将end2位置的值赋给数组nums1数组的i位置。并且让i和end2同时进行- -操作。反之则让end1位置的值赋给i,并且两个变量同时减减操作。当end2先减减到小于,这是第一种情况。因为nums1的元素被本身就存放在nums1数组中,并且元素本身就存在顺序,所以不用管。
第二种情况,就是end2数组中还有剩余元素,那么我们仅仅需要将其他元素继续放在i位置即可。如下图这种情况:
在这里插入图片描述
代码如下:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
 {
    int end1=m-1;
    int end2=n-1;
    int i=m+n-1;
    while(end1>=0&&end2>=0)
    {
        if(nums1[end1]<nums2[end2])
        {
            nums1[i]=nums2[end2];
            i--;
            end2--;
        }
        else
        {
            nums1[i]=nums1[end1];
            i--;
            end1--;        
        }
    }    
    while(end2>=0)
    {
        nums1[i]=nums2[end2];
        i--;
        end2--;
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/551859.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一夜爆红的4款国产软件,却一度被大众误以为是外国人开发

在现今高度信息化的时代&#xff0c;计算机已经深深地渗透到了我们生活的每一个角落。 从日常的办公学习到娱乐休闲&#xff0c;几乎都离不开计算机技术的支持。而在这背后&#xff0c;软件作为计算机的灵魂&#xff0c;其发展历史可谓波澜壮阔。 中国软件产业经过多年的积累和…

【UE 材质】一些使用外部数据的节点的简单介绍

目录 一、ActorPosition 二、绝对世界位置 三、“CameraVector”与“ReflectionVector” 四、PixelDepth 一、ActorPosition 介绍 用于获取Actor在世界场景中的位置信息 应用举例 我们可以通过“ActorPosition”“Mask&#xff08;B&#xff09;”来获取Actor在Z轴上的位…

Vue项目管理器创建项目

黑马程序员JavaWeb开发教程 文章目录 1、创建新项目2、详情3、预设4、功能5、配置6、是否保存为预设模板7、正在创建项目8、创建完成 1、创建新项目 2、详情 3、预设 选择手动&#xff0c;点击下一步 4、功能 只需要额外选择一项–Router 即可&#xff0c;其余的保持默认&a…

Android Studio修改项目包名

1.第一步&#xff0c;项目结构是这样的&#xff0c;3个包名合在了一起&#xff0c;我们需要把每个包名单独展示出来 2.我们点击这个 取消选中后的包名结构是这样的&#xff0c;可以看到&#xff0c;包名的每个文件夹已经展示分开了&#xff0c;现在我们可以单独对每个包名文件夹…

【重磅】2024大模型应用研究与案例报告合集(共18份)

文末领取福利&#xff0c;扫描进群获取&#xff01;&#xff01;&#xff01; 2024工业大模型应用报告.pdf 2024大语言模型能力测评报告.pdf 2024大模型落地应用案例集.pdf 2023中文大模型基准测评年度报告.pdf 2023人工智能大模型体验报告3.0.pdf 2023人工智能大模型体验报告…

Python文件操作大全

1 文件操作 1.1 文件打开与关闭 1.1.1 打开文件 在Python中&#xff0c;你可以使用 open() 函数来打开文件。以下是一个简单的例子&#xff1a; # 打开文件&#xff08;默认为只读模式&#xff09; file_path example.txt with open(file_path, r) as file:# 执行文件操作…

网络编程(现在不重要)

目录 网络编程三要素与InetAddress类的使用 软件架构 面临的主要问题 网络编程三要素&#xff08;对应三个问题&#xff09; InetAddress的使用 TCP与UDP协议剖析与TCP编程案例&#xff08;了解&#xff09; TCP协议 UDP协议 例子 UDP、URL网络编程 URL&#xff1a;&…

机器学习引领金融革命:重塑金融服务领域新格局,开启智能化新篇章

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

抖店选品技巧!如何在直播间找到“爆品”?新手必看

哈喽~我是电商月月 说到选品&#xff0c;除了看商品排行榜榜单&#xff0c;还可以去直播间看别人卖的好的商品&#xff0c;我们就跟着上架 但现实就是&#xff0c;如果真的这么简单&#xff0c;就不会有那么多人的店铺因为不怎么出单而放弃开店 其实这个方法确实是对的 但这…

when语法学习及判断主机别名实例

目录 1、概念 2、实例配置 2.1 编写剧本体验when的用法 2.2 执行剧本文件 2.3 使用ansible临时命令进行测试 1、概念 when是用于判断的语法&#xff0c;将其用在每个动作的下方进行判断&#xff0c;使得只有在满足条件才会执行。 2、实例配置-判断主机别名 在每个客户端中…

c语言中声明的问题【求个关注!】

文章目录 1 变量的声明与定义&#xff08;1&#xff09;定义与声明的区别&#xff1a;&#xff08;2&#xff09;为什么要区分定义与声明&#xff1f;&#xff08;3&#xff09;extern是什么 ?&#xff08;4&#xff09;举例&#xff1a; 2 函数的声明&#xff1a;函数声明的格…

SpringCloud集成Skywalking链路追踪和日志收集

1. 下载Agents https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz 2. 上传到服务器解压 在Spring Cloud项目中&#xff0c;每部署一个服务时&#xff0c;就拷贝一份skywalking的agent文件到该服务器上并解压。不管是部署…

10-菜刀连接木马

找到了漏洞后&#xff0c;并且上传了木马之后才能使用的两款工具 中国菜刀和冰蝎 想办法获取别人的cookie&#xff0c;cookie中有session-id 一、中国菜刀 1、必须提前已经完成木马植入然后才能使用 2、木马必须是POST请求&#xff0c;参数自定义&#xff0c;在菜刀里给出…

文件操作(C语言)

目录 1.为什么使用文件&#xff1f; 2.什么是文件&#xff1f; 2.1程序文件 2.2数据文件 2.3文件名 3.二进制文件和文本文件 4.文件的打开和关闭 4.1流和标准流 4.1.1流 4.1.2标准流 4.2文件指针 4.3文件的打开和关闭 5.文件的顺序读写 5.1顺序读写函数介绍 5.2…

(二)使用VS2022克隆下载C++自制植物大战僵尸游戏教程

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/uzrnw 本文将介绍如何使用VS2022克隆下载《植物大战僵尸C自制版本》。 Gitee项目地址&#xff1a; Gitee仓库地址https://gitee.com/GITLZ/PlantsVsZombies Github项目地址&#xff1a; Github仓库地址https://github…

IoC与Spring

目录 IoC控制反转 现实案例 特点 目的 DI依赖注入 小总结 介绍Spring 狭义和广义上的Spring 传统编码方式的不足 需求引入 弊端分析 IoC控制反转 现实案例 1、买水果问老板各种水果的口感而不是自己去挨个尝试一遍。 2、买房子找中介而不是自己去花时间找房东。…

金蝶云星空与旺店通·企业版对接集成供应商查询打通创建供应商

金蝶云星空与旺店通企业版对接集成供应商查询打通创建供应商 接通系统&#xff1a;金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平…

RK3588 linux 修改ulimit 配置

前言 ulimit 主要是用来限制进程对资源的使用情况的&#xff0c;它支持各种类型的限制&#xff0c;常用的有&#xff1a; 内核文件的大小限制进程数据块的大小限制Shell进程创建文件大小限制可加锁内存大小限制常驻内存集的大小限制打开文件句柄数限制分配堆栈的最大大小限制C…

如何提高直线模组的技术水平?

在工业制造业中&#xff0c;不管我们使用任何机械产品&#xff0c;都有一个共同的出发点&#xff0c;就是能用先进的技术突破其产品的性能及使用性。那么直线模组究竟是用什么技术突破其产品的使用性的呢&#xff1f; 1、优化机械设计&#xff1a;设计过程中应充分考虑模组的结…

OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;实战 | 基于YOLOv9SAM实现动态目标检测和分割&#xff08;步骤 代码&#xff09; 0 导 读 本文主要介绍基于YOLOv9SAM实现动态目标检测和分…