合并两个有序数组(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…...
开源科研操作系统OpenResearcher:一体化工作流与知识管理实践
1. 项目概述:当开源遇上学术研究如果你是一名研究生、博士生,或者任何需要长期进行文献调研、实验记录和论文撰写的科研工作者,那么你大概率经历过这样的场景:电脑桌面上散落着几十个PDF文件,文件名是“paper1.pdf”、…...
AI赋能的两种逻辑企业如何选?:从「AI+行业」
在人工智能全面重构产业格局的今天,用不用 AI 已经不是问题,怎么用 AI 才是生死关键。同样是布局 AI,有的企业只实现小幅增效,有的企业却直接颠覆行业、重塑价值链。 核心差距,就在于选择了 「AI 行业」的加法逻辑&am…...
OpenClaw Studio:基于Web技术的可视化自动化工作流构建平台解析
1. 项目概述:从开源仓库到创意工坊的蜕变 看到 grp06/openclaw-studio 这个项目标题,我的第一反应是:这又是一个在 GitHub 上诞生的、充满潜力的开源工具。 grp06 看起来像是一个团队或个人的标识,而 openclaw-studio 则直…...
深入PEX8796:从Serdes到Virtual Switch,图解PCIe交换芯片的三种工作模式
深入解析PEX8796:PCIe交换芯片的架构设计与模式创新 在高速数据传输领域,PCIe交换芯片如同交通枢纽般连接着计算系统的各个组件。作为PLX公司(现已被博通收购)的经典之作,PEX8796凭借其灵活的架构设计和多样化的操作模…...
77种商品-图像分类数据集
77种商品图像分类数据集 数据集(文章最后关注公众号获取数据集): 链接: https://pan.baidu.com/s/1Xcj5Z-RSUjGH47OIbH5wjQ?pwd=fq2p 提取码: fq2p 数据集信息介绍: 以下是整理后的清晰呈现,按照商品名称首字母顺序进行排列: 东方树叶红茶:文件夹中的图片数量为 150 …...
WindowsCleaner完整解析:如何用开源工具彻底解决Windows系统卡顿和C盘爆红问题
WindowsCleaner完整解析:如何用开源工具彻底解决Windows系统卡顿和C盘爆红问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾经在关键时刻被…...
Cursor AI 规则引擎:自动化编码规范与项目约束实践指南
1. 项目概述:一个为 Cursor 编辑器量身定制的规则引擎如果你和我一样,深度依赖 Cursor 这款 AI 驱动的代码编辑器,那你一定经历过这样的时刻:面对 AI 生成的代码,既惊叹于它的效率,又时常为它不遵守团队规范…...
STM32F429IGT6项目实战:基于STM32CubeMX的SDRAM配置与性能优化
1. 为什么需要SDRAM配置 在嵌入式开发中,尤其是使用STM32F429IGT6这类高性能MCU时,SDRAM(同步动态随机存取存储器)的配置往往成为项目成败的关键。我曾在多个图形界面项目中深刻体会到,当需要处理高分辨率图像或大量数…...
在职场上,别人对你的态度,都是你允许的:“他为什么敢这样对我?”“他为什么不怕得罪我?”“我有什么好怕的?”
当有人在公司凶你时:别问"他为什么凶我",要问"他为什么敢" 目录 当有人在公司凶你时:别问"他为什么凶我",要问"他为什么敢" 别人敢在公司得罪你,是因为他早已算清了这笔账 他不怕得罪你,说明在他眼里你"没有威胁性" …...
Python 代码优化:核心技巧与模式
Python 代码优化:核心技巧与模式 1. 技术分析 1.1 代码优化原则 代码优化需要遵循以下原则: 优化原则先测量后优化: 避免盲目优化保持可读性: 不要为了性能牺牲代码质量优先算法优化: 算法层面的优化效果最显著考虑空间换时间: 合理使用缓存1.2 常见性能…...
