合并两个有序数组(leetcode_刷题1)
目录
题目:合并两个有序数组
题目分析方向1:
题目分析方向2:
题目:合并两个有序数组
题目要求:
给你两个按 非递减顺序 排列的整数数组 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.length == m + nnums2.length == n0 <= m, n <= 2001 <= m + n <= 200-109 <= nums1[i], nums2[j] <= 109
进阶:你可以设计实现一个时间复杂度为 O(m + n) 的算法解决此问题吗?
题目分析:
题目分析方向1:
首先我们看到这个是个有序数组,因此可以考虑使用归并的思想,合并两个有序数组。
那我们可把上面的nums1和nums2的数据尾插到新的数组来nums3
规律1:依次比较,取小的尾插到新数组nums3里面,也就是把最小的数据取出来放到新的数组nums3里面。
规律2:数据大小相同,则随便取nums1或者nums2数组中的一个数据即可。
因为是非递减数列:那么该数组的数组从前到后,要么就是比前面大,要么跟前面相等。
大小数据是n
那么这个归并的时间复杂度是经典的O(n);

那么尾插到nums3数组后的数据结果为为nums3={1,2,2,3,5,6};
如果是这种有序数据,我们是不是有些人会想,如果使用冒泡排序也是可以实现啊。
那如果我们假设两个数组的长度是N,
那么使用冒泡排序的时间复杂度就是O(N2),
那么使用qsort 快速排序也是O(N*log2N)(log2N,就是以2为低的对数)。
从以上的分析,使用归并的思想也是可以将上面两个有序数组进行排序,但是很显然这个是不符合题目要求的:因为题目的要是是合并后的数据存放到nums1中。
但是在有序无序的数据,如nums1={2,2,3,0,0,0};nums2={1,5,6};如果nums2[0]<nums1[0],那么nums2[0]的值就覆盖到nums1[0]里面,这个就会导致原本数组数据不对了。
因此,这里我们得另想他法:
题目分析方向2:
既然分析方向1的解法只适合有序的的数组,那么归并的方法就显得不合适了。
这里,我想到了一个方法就是从后往前比较。
画图吧!

从图中,我们可以知道两个有序数组进行第四次比较的时候就完成了两个数组的合并。
当完成第四次比较之后,我们知道nums2是位于首元素位置,而nums1则位于元素1位置。
那么我们可能会问,nums1并没有比较遍历全部元素,是否还需要剩下的元素进行排序
结果显然是不需要的。因为,nums1中剩下的元素位于数组的低地址处,本身属于有序数组,因为不需要再进行比较。
那么代码上是怎么实现的呢?
在这里解释一下部分代码:
nums1[i--],会先返回nums[i]的值,也就是此刻参与计算的还是nums[1]的值,同时i--,让i指向下一个元素。
并且从运算的逻辑来看,i--属于先赋值后运算的符号。
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int i=m-1;int j=n-1;int k=m+n-1;while(i>=0 && j>=0){if(nums1[i]>nums2[j]){nums1[k--]=nums1[i--];}else{nums1[k--]=nums2[j--];}} while(j>=0){nums1[k--]=nums2[j--];}}

相关文章:
合并两个有序数组(leetcode_刷题1)
目录 题目:合并两个有序数组 题目分析方向1: 题目分析方向2: 题目:合并两个有序数组 题目要求: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums…...
麒麟linux将图片批量生成PDF的方法
笔者手里有一批国产linu系统,目前开始用在日常的工作生产环境中,我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux,统信UOS等,基本都是基于debian再开发的linux。 问题描述: wind…...
Linux——vim编辑文件时——.swp文件解决方案
test.cpp样例 当我们vim test.cpp进入编辑文件。 却忘记了保存退出 再次进入就会出现一下画面 当你摁下Enter键位 出现以下几个选项 O——是只读不写 E——是正常打开文件但不会载入磁盘内容 R——覆盖——是加载存储磁盘的文件(当我们忘记保存时,系统会自动帮我…...
【Maven】清理 maven 仓库
初始情况下,我们的本地仓库是没有任何jar包的,此时会从私服去下载(如果没有配置,就直接从中央仓库去下载)。 可能由于网络的原因,jar包下载不完全,这些不完整的jar包都是以lastUpdated结尾。此…...
APOLLO自动驾驶技术沙龙:未来已来,共创智能交通新时代
在这次Apollo会议上,我深刻地感受到了人工智能自动驾驶技术领域的最新进展和未来趋势。作为一名从事软件开发工作的人员,我深感荣幸能够参加这次盛会。 前言 本次活动是百度Apollo社区工程师齐聚首钢Park,带来现场实操与技术分享。主要围绕Ap…...
Java面试题12
1.redis 怎么实现分布式锁? Redis可以通过以下方式实现分布式锁: 使用RedLock算法:多个Redis节点组合使用,通过竞争锁来达到分布式锁的效果。使用SETNX命令:利用SETNX(SET if Not eXists)命令…...
ubuntu上创建服务启动python脚本
场景 最近在使用ubuntu服务器部署MySQL和同步数据,同步数据使用的是python,但是我不能直接操作服务器,只能通过Xshell远程访问服务器,但是启动python脚本的时候如果关掉xshell会停止Python脚本,所以如果要让python脚本…...
51单片机制作数字频率计
文章目录 简介设计思路工作原理Proteus软件仿真软件程序实验现象测量误差和范围总结 简介 数字频率计是能实现对周期性变化信号频率测量的仪器。传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行较慢,而且测量频率的范围较小。这…...
java中强引用、软引用、弱引用、虚引用的区别是什么?
Java中的引用类型主要分为强引用、软引用、弱引用和虚引用,它们之间的区别主要体现在垃圾回收的行为上。 强引用(Strong Reference):这是使用最普遍和默认的引用类型。如果一个对象具有强引用,那么垃圾回收器就永远不会…...
springboot -事务管理
事务 概念 事务是一组操作的集合,它是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败。 操作 开启事务: start transaction / begin提交事务:commit回滚事务: rollback 注解 Transactional …...
商城系统通过Kafka消息队列,实现订单的处理和状态更新
以下是一个简单的Spring Boot应用程序示例,演示如何使用Kafka实现订单的处理和状态更新。 首先,我们创建一个名为“order”的topic,在application.yaml配置文件中添加Kafka的配置: spring:kafka:bootstrap-servers: localhost:9…...
IntelRealSense深度相机D455在ROS1运行中的消息内容
IntelRealSense深度相机D455在ROS1运行中的消息内容 通过下面命令所有相关信息通过ros topic的方式发布出去rosnode查看rqt_graph查看rostopic查看通过下面命令直接查看RVIZ中点云信息rosnode查看rqt_graph查看rostopic查看 Physical Port:: /sys/devices/pci0000:0…...
公有云迁移研究——AWS Translate
大纲 1 什么是Translate2 Aws Translate是怎么运作的3 Aws Translate和Google Translate的区别4 迁移任务4.1 迁移原因 5 Aws Translate的Go demo6 迁移中遇到的问题6.1 账号和权限问题:6.2 小语种 1 什么是Translate Translate是一种文本翻译服务,它使…...
【laBVIEW学习】4.声音播放,自定义图标,滚动条设置,保存参数以及恢复参数
一。声音播放(报错,未实现) 1.报错4810 2.解决方法: 暂时未解决。 二。图片修改 1.目标:灯泡---》自定义灯泡 2.步骤: 1.右键点击--》自定义运行 表示可以制作自定义类型 2.右键--》打开自定义类型 这样就…...
《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL
《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL 前言简介相关知识Stochastic Gradient Variational BayesMultivariate Gaussian DistributionIsotropic Gaussian DistributionReparameterization Trickprior network & posterior network …...
【win32_003】不同字符集下的通用字符串语法TCHAR、TEXT、PTSTR、PCTSTR
TCHAR 通用 根据项目属性是否使用Unicode字符集,TCHAR被解释为CHAR(char)或WCHAR(wchar_t)数据类型。 TCHAR a ‘A’ ; TCHAR arr [] TEXT(“AA”); TCHAR arr [100] TEXT(“AA”); TCHAR *pstr TEXT(“AA”); TEXT宏 #ifdef UNICODE #define __TEXT(quote) L#…...
《漫长的等待》—— 读后感
前几天下班地铁上,人太多,看技术书籍看不进去,翻阅微信读书,看到了这本书,看了几章免费的章节,因为后续需要买会员就没有继续读,但是这几天偶尔还是会想到书籍中的情节,所以今天充了…...
基于ROPNet项目训练modelnet40数据集进行3d点云的配置
项目地址: https://github.com/zhulf0804/ROPNet 在 MVP Registration Challenge (ICCV Workshop 2021)(ICCV Workshop 2021)中获得了第二名。项目可以在win10环境下运行。 论文地址: https://arxiv.org/abs/2107.02583 网络简介…...
力扣215. 数组中的第K个最大元素
堆排序 前言 面试中著名的 TopK 排序;常见的解法有冒泡排序、堆排序;更深入的思路可以参考:拜托,面试别再问我TopK了!!!使用了堆排序的算法,关于堆可以参考:堆数据结构的…...
轻量封装WebGPU渲染系统示例<40>- 多层材质的Mask混合(源码)
当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/MaskTextureEffect.ts 当前示例运行效果: 两层材质效果: 三层材质效果: 此示例基于此渲染系统实现,当前示例TypeScript源码如下: export c…...
消费战略方法拆解:从判断到落地的完整框架
一、先给定义消费战略如何改变企业:消费战略不是单独增加一个品牌概念,而是帮助企业重新建立“方向—认知—路径”的统一逻辑,让机会需求、核心烙印、产品结构与增长动作进入同一条主线。一句话结论:消费战略真正改变的是企业的判…...
Qwen3-32B-Chat部署避坑指南:120GB内存+10核CPU配置要求详解
Qwen3-32B-Chat部署避坑指南:120GB内存10核CPU配置要求详解 1. 镜像概述与环境准备 1.1 镜像核心特性 本镜像专为Qwen3-32B-Chat模型私有部署优化,主要特点包括: 硬件适配:针对RTX 4090D 24GB显存显卡深度优化软件栈ÿ…...
从流体力学到深度学习:手把手教你用PINN预测涡流场(基于TensorFlow2.10+GPU)
从流体力学到深度学习:手把手教你用PINN预测涡流场(基于TensorFlow2.10GPU) 当计算流体力学遇上深度学习,一场颠覆传统的技术革命正在悄然发生。物理信息神经网络(PINN)作为两者的完美结合,正在…...
高性能离线IP定位:ip2region实现微秒级地址解析的技术方案
高性能离线IP定位:ip2region实现微秒级地址解析的技术方案 【免费下载链接】ip2region Ip2region (2.0 - xdb) 是一个离线IP地址管理与定位框架,能够支持数十亿级别的数据段,并实现十微秒级的搜索性能。它为多种编程语言提供了xdb引擎实现。 …...
三伍微Wi-Fi射频芯片实测:如何用GSR2303替代SKY85303提升路由器信号(附兼容清单)
三伍微GSR2303射频芯片实战指南:从参数对比到焊接优化的完整替代方案 在路由器硬件迭代和成本优化的双重驱动下,国产射频前端模块(FEM)正逐步打破国际大厂的垄断格局。三伍微电子推出的GSR2303作为SKY85303的兼容替代方案,不仅实现了引脚对引…...
Android12 编译环境搭建避坑指南:从配置优化到实战调试
1. 硬件配置:别让机器性能成为你的绊脚石 第一次编译Android 12的经历让我记忆犹新——连续8小时的等待,最终却以内存溢出告终。这种痛苦我懂,所以先来聊聊硬件配置这个最基础也最容易踩坑的环节。 Android官方文档给出的最低配置要求就像汽车…...
DeepSeek-Coder-V2:开源代码智能模型的部署与应用实践
DeepSeek-Coder-V2:开源代码智能模型的部署与应用实践 【免费下载链接】DeepSeek-Coder-V2 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Coder-V2 在当今软件开发领域,AI辅助编程已成为提升开发效率的关键技术。DeepSeek-Coder-…...
ComfyUI文生图工作流参数调优实战:从新手到进阶的5个关键技巧
ComfyUI文生图工作流参数调优实战:从新手到进阶的5个关键技巧 当你已经能够用ComfyUI生成基本图像后,是否遇到过这些困扰:明明用了精心设计的提示词,结果却总差强人意?生成的人物面部细节模糊得像打了马赛克࿱…...
IDEA插件开发避坑指南:从环境搭建到第一个Hello World插件
IDEA插件开发实战:从零构建Hello World插件的完整避坑手册 作为JetBrains生态中最强大的扩展方式,IDEA插件开发能让开发者深度定制IDE功能。但新手在搭建环境和实现第一个插件时,往往会遇到各种"坑"。本文将用实战方式带你避开这些…...
【Frida Android】实战篇:Java层Hook进阶——拦截与篡改普通方法参数
1. 从基础到进阶:为什么需要拦截方法参数? 在之前的Frida基础教程中,我们已经学会了如何Hook普通方法并修改其返回值。但实际逆向工程中,仅仅修改返回值往往不够——我们需要更深入地干预方法的执行流程,而拦截并篡改方…...
