Leetcode力扣秋招刷题路-0088

news/2024/4/19 22:08:20/文章来源:https://blog.csdn.net/qq_43022896/article/details/129155953

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结

88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 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 + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
−109-10^9109 <= nums1[i], nums2[j] <= 10910^9109

进阶:你可以设计实现一个时间复杂度为 O(m + n) 的算法解决此问题吗?

解法一
因为数组1的总长度是大于等于m+n的,所以把数组2的元素都拷贝到数组1中
数组1中的元素有m个,所以数组2中的第一个元素拷贝到数组1中对应的下标就是m,
第二个元素拷贝过来对应的下标是m+1,一直到m+n-1
拷贝完后,将数组1整体排序一遍就搞定了,这里没有用到外部空间,但排序一遍最快也要 O((n+m)log(n+m))时间,所以时间复杂度会略高
在这里插入图片描述

代码实现:

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for(int i=m,j=0;i<n+m;++i,++j) {nums1[i] = nums2[j];}Arrays.sort(nums1);}
}

解法二
跟合并两个有序链表类似,这里也用两个指针分别指向数组1的开头,和数组2的开头。
跟链表合并不同,如果往数组中插入一个元素,为了保证整体的顺序性,需要挪动前后的元素,所以我们需要再新建一个数组。
之后比较两个数组中的元素nums1[i]和nums2[j],将其放到新数组中。
在这里插入图片描述

这种两两合并的好处是可以免掉排序了,比较完之后再放到新数组中,元素都是有序的了。
但题目要求是在数组1的基础上进行修改,而不是返回一个新数组,所以我们还得把排序好的新数组内容,再重新赋给数组1。

代码实现:

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int i = 0;int j = 0;int k = 0;int[] arr = new int[n+m];while(j<m || k<n) {//注意两个边界条件:j==m,以及k==n,表示一个数组已经拷贝完了if(j==m) {arr[i++] = nums2[k++];}else if(k==n) {arr[i++] = nums1[j++];}else if(nums1[j]<=nums2[k]) {arr[i++] = nums1[j++];}else {arr[i++] = nums2[k++];}}//还需要将新数组中的元素再拷贝回去for(i=0;i<arr.length;++i) {nums1[i] = arr[i];}}
}

解法三
解法二中我们将两个数组合并到一个新数组中,是从两个数组的开头开始一一比较。
这是符合直觉的,但仔细想想,数组1和数组2都是有序的,所以从前往后看是有序,从后往前看也是有序。
另外题目中也说明了,数组1的空间是足够的,它可以完全容纳下数组1的m个元素和数组2的n个元素。
这两个条件拼在一起,我们就有了新的比较方式,即:反着比较。
在这里插入图片描述

反着比较nums1[m-1]和nums2[n-1],因为6更大所以将6拷贝过去。
注意,这回我们不用再新建一个数组了,数组1后面都是空着的,也有足够空间可以容纳下数组2中的所有元素。
我们将两个数组中最大的数放到数组1的最后一位(下标n+m-1处),将倒数第二大的数放到数组1的倒数第二位(下标n+m-2处)。
依次类推直到两个数组的元素全部比较完。
最后数组1就是有序的,这种比较方式不需要再占用额外的空间。

代码实现:

class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int i = m-1;int j = n-1;int k = m+n-1;while(i>=0 || j>=0) {//注意两个边界条件,i<0以及j<0,这表示一个数组已经拷贝完了if(i<0) {nums1[k--] = nums2[j--];}else if(j<0) {nums1[k--] = nums1[i--];}//反向比较时,拷贝的是较大的那个元素else if(nums1[i]<=nums2[j]) {nums1[k--] = nums2[j--];}else {nums1[k--] = nums1[i--];}}}
}

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

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

相关文章

我说我为什么抽不到SSR,原来是这段代码在作祟...

本文是龚国玮所写&#xff0c;熊哥有所新增修改删减&#xff0c;原文见文末。 我说我为什么抽不到SSR&#xff0c;原来是加权随机算法在作祟 阅读本文需要做好心理准备&#xff0c;建议带着深究到底的决心和毅力进行学习&#xff01; 灵魂拷问 为什么有 50% 的几率获得金币&a…

同一局域网的不同主机使用共享文件夹通信(仅限于不同Windows主机之间的通信)

1、新建共享文件夹 我们新建一个文件夹 Server-Share&#xff0c;右键点击“ 属性 ” 选择“everyone”&#xff0c;即允许当前局域网下的所有用户访问这个共享文件夹 此时该文件夹面向当前局域网是公开的。 2、服务器访问共享文件夹 (1) 查看当前电脑的IP IP地址可以唯一标…

企业为什么需要数据可视化报表

数据可视化报表是在商业环境、市场环境已经改变之后&#xff0c;发展出来为当前企业提供替代解决办法的重要方案。而且信息化、数字化时代&#xff0c;很多企业已经进行了初步的信息化建设&#xff0c;沉淀了大量业务数据&#xff0c;这些数据作为企业的资产&#xff0c;是需要…

园区数字化转型必不可少的助推器:快鲸智慧园区系统

数字化浪潮下&#xff0c;园区数字化转型已成必然趋势。可大多数人在讨论智慧园区的时候&#xff0c;更多聚焦在技术上&#xff0c;却忽略了一个关键点&#xff0c;就是打造智慧园区最终的结果导向是提高业务信息化水平&#xff0c;进而达到集约高效、提质增效、节能降耗的可持…

干货复试详细教程——从联系导师→自我介绍的复试教程

文章目录联系导师联系之前的准备联系导师注意自我介绍教育技术领域通用的复试准备其他补充联系导师 确定出分和自己能进复试以后联系。 分两类 科研技能型 低调&#xff0c;如实介绍&#xff0c;不吹不水。就算你很牛啥都会手握核心期刊论文也不太狂 学霸高分型 不要自卑&…

STM32-CAN配置与库函数解析,实现环回模式通信

STM32-CAN配置与库函数解析 CAN总线介绍&#xff1a;https://blog.csdn.net/weixin_46251230/article/details/129147612 STM32-CAN控制器介绍&#xff1a;https://blog.csdn.net/weixin_46251230/article/details/129150872 STM32CubeMx配置 因为bxCAN是挂载在APB1总线上的…

【学习总结】相机与IMU标定一:Kalibr论文

论文&#xff1a;2013IROS论文&#xff0c;Unified Temporal and Spatial Calibration for Multi-Sensor Systems&#xff0c;是Kalibr工具的参考论文之一。介绍了如何进行IMU与相机标定。 参考的一篇资料&#xff1a;知乎&#xff1a;超全汇总&#xff01;多传感器离线/在线时…

新建微服务模块Maven子工程

gitegg-cloud是微服务框架&#xff0c;整体功能是非业务相关的基础功能&#xff0c;在实际业务开发过程中需要新建微服务的业务模块&#xff0c;根据业务的整体规划&#xff0c;设计新建Maven子工程。   下面以常用的电商项目举例新建Maven子工程&#xff0c;电商项目一般包含…

VIIRS-NPP夜间灯光遥感数据下载和预处理

VIIRS-NPP夜间灯光遥感数据下载和预处理 月和年合成产品下载网站 日数据下载网站 一、下载shp掩膜文件 下载好月合成产品后&#xff0c;在这个网站上下载矢量地图&#xff0c; 点击复制按钮&#xff0c;来到这个网站&#xff0c;ctrl v粘贴 点击右上角Export&#xff0c;…

搞懂事件——C# 的event的机制深度理解

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:无尽的折腾后,终于又回到了起点,工控,我来了 !1. 前言 为什么忽然对Event感兴趣了? 因为进入Web时代以后,很少使用它了,忽然想起这个知识点,…

九龙证券|市场化转融资业务试点上线首日平稳运行

2月21日&#xff0c;中国证券金融股份有限公司&#xff08;下称“中证金融”&#xff09;商场化转融资事务试点迎来首个买卖日。全天该事务试点平稳运转&#xff0c;商场化转融资规模合计10亿元。 业内人士以为&#xff0c;商场化转融资事务形式下&#xff0c;证券公司参加转融…

使用51单片机和DS1302时钟芯片做一个简易的电子时钟

简易的电子时钟实验一、前言二、DS1302模块介绍三、驱动DS1302的代码3.1 初始化DS1302时钟芯片3.2 读取DS1302时钟芯片的时间3.3 设置DS1302时钟芯片的时间3.4 读取DS1302时钟芯片的RAM四、读取DS1302时钟芯片的RAM4.1 发送读取RAM的命令4.2 读取RAM的内容4.3 读取部分单独代码…

[飞桨paddle]1. conda安装paddle环境.模型转换,pytorch->paddlepaddle

“一生费城七六人”1. conda装paddle环境1.1 验证是否装好2. x2paddle2.1 介绍2.2 安装3 模型转换3.1 pt -> onnx3.2 onnx > .pdparams3.2.1 会出现的错误情况3-1. 第一种情况3-2. 第二种情况4. 查看结果问题阐述&#xff1a;将yoloV5项目移至paddle框架下执行时&#xf…

中央一号文件首提“即时零售”,县域掀起消费业态新风潮

经过几年的探索&#xff0c;即时零售已经逐步走向成熟&#xff0c;并开始向三四线城市以及乡镇城市渗透。 过去一年&#xff0c;京东、美团、阿里争先布局即时零售市场&#xff0c;完善即时配送网络、培养用户消费习惯&#xff0c;即时零售订单迎来了骤增。2022年下半年&#…

C/C++每日一练(20230222)

目录 1. 部分复制字符串(★) 2. 按字典顺序排列问题(★★) 3. 地下城游戏(★★★) 附录 动态规划 1. 部分复制字符串 将字符串2小写字母复制到字符串1&#xff1a;编写程序,输入字符串s2,将其中所有小写字母复制到字符串数组strl中。例如&#xff1a;aal1bb22cc33de4AA55…

Java实现多线程有几种方式(满分回答)

目录JDK8 创建的线程的两种方式orcle文档解释方式一&#xff1a;继承Thread类方式二&#xff1a;实现Runnable接口同时用两种的情况其他间接创建方式Callable接口线程池JDK8 创建的线程的两种方式 orcle文档解释 orcle文档&#xff1a;https://docs.oracle.com/javase/8/docs…

九龙证券|银行资本管理办法迎“大修” 信用风险权重法调整优化

1年期AAA中债商业银行同业存单到期收益率 日前迎来“大修”的商业银行本钱办理方法&#xff0c;在债券商场激起“涟漪”——债券商场一改此前平静态势&#xff0c;连续两日跌落。 2月21日&#xff0c;10年期国债收益率较上星期五上行2.9个基点&#xff0c;至2.919%&#xff1b…

Redis学习【10】之Redis主从集群(1)

文章目录一 Redis主从集群搭建1 伪集群搭建与配置1.1.1 分级管理1.1.2 容灾冷处理1.2 主从复制原理1.2.1 主从复制过程1.2.2 数据同步演变过程1.3 哨兵机制实现1.3.1 哨兵机制简介1.3.2 Redis 高可用集群搭建1.3.3 Redis 高可用集群的启动1.3.4 Sentinel 优化配置1.4 哨兵机制原…

Spring中自定义Session管理,Spring Session源码解析

系列文章&#xff1a;Spring Boot学习大纲&#xff0c;可以留言自己想了解的技术点 目录 系列文章&#xff1a;Spring Boot学习大纲&#xff0c;可以留言自己想了解的技术点 1、session是什么&#xff1f; 1>session在哪里&#xff1f; 2>服务器怎么知道每次说话的是…

H5盲盒抽奖系统源码

盲盒抽奖系统4.0&#xff0c;带推广二维码防洪炮灰功能和教程。 支持微信无限回调登录 标价就是源码价格&#xff0c;vuetp5框架编写&#xff0c;H5网页&#xff0c;前后端分离 此源码为正规开发&#xff0c;正版产品已申请软著。 开源无加密无授权&#xff0c;可以二开使用…