中数组的合并_【美团面试题】合并两个有序数组

b5711453cc09d4aaa404548a196bda39.png

【美团面试题】合并两个有序数组

题目描述

给你两个有序整数数组 nums1nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组

划重点

  • 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
  • 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素

示例

示例 1:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6],       n = 3输出:[1,2,2,3,5,6]

提示:

-10^9 <= nums1[i], nums2[i] <= 10^9
nums1.length == m + n
nums2.length == n

解题思路

两个数组分别有序,且最终要输出的是数组一解法如下

14292311d9fded06bda81ba209d6b24b.png

解法

解法一: 暴力法

将数组nums2中的元素全部添加到nums1中,对nums1做排序

bac5e2ca57c940d742d592f0f3f50a93.png

解法二:倒插法

已知条件

  1. Nums1 的剩余空间刚好可以存放nums2的元素
  2. nums1和nums2都是有序的。
  3. 已知两个数组的元素个数

通过分析一直条件我们可以发现,nums1存在一定的后置空间,因此我们可以考虑通过对两个数组的末位元素进行对比,然后从后往前插入到nums1中的方法。

所以我们可以用三个指针P0,P1,P2来遍历数组:

P0: 记录nums1的新元素位置

P1: 记录nums1原数组的元素位置

P2: 记录nums2原数组的元素位置

设置遍历条件 (p1 >= 0 && p2 >= 0)

比较指针指向的元素大小,将较大的元素放入指针P0的位置,同时移动P0和较大元素的指针。

当遍历条件为 false时 存在三种情况

  1. P1 == 0 P2 ==0 数组都遍历完了
  2. P1 == 0 P2 > 0 Nums2没有遍历完
  3. P1 > 0 P2 ==0 Nums1没有遍历完

当结果出现1和3时,nums1恰好是合并排序的最终结果

当出现结果2时,说明nums2中还有剩余元素,所以继续移动指针P1,将nums2剩余元素插入到nums1中就行

代码实现

   public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = m - 1;int p2 = n - 1;int p0 = m + n - 1;while (p1 >= 0 && p2 >= 0) {if (nums1[p1] >= nums2[p2]) {nums1[p0] = nums1[p1];p1--;} else {nums1[p0] = nums2[p2];p2--;}p0--;}// 处理 nums2 没有遍历完的情况while (p2 >= 0) {nums1[p0--] = nums2[p2--];}}

复杂度分析

时间复杂度:

O(n + m)

空间复杂度:

O(1)

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

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

相关文章

git切换用户密码_Java小白入门,常用Git命令有哪些?

Git简介Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本库的方…

with语句python_Python之with语句

Python之with语句在Python中&#xff0c;我们在打开文件的时候&#xff0c;为了代码的健壮性&#xff0c;通常要考虑一些异常情况&#xff0c;比如&#xff1a;try:ccfile open(/path/data)contentccfile.readlines()ccfile.close()exceptIOError:log.write(no data read\n)我们…

css中的单位换算_css大小单位px em rem的转换和详解

css大小单位px em rem的转换和详解PX特点1. IE无法调整那些使用px作为单位的字体大小&#xff1b;2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位&#xff1b;3. Firefox能够调整px和em&#xff0c;rem&#xff0c;但是96%以上的中国网民使用IE浏览器(或内…

有几种部署模式_来!PyFlink 作业的多种部署模式

关于 PyFlink 的博客我们曾介绍过 PyFlink 的功能开发&#xff0c;比如&#xff0c;如何使用各种算子(Join/Window/AGG etc.)&#xff0c;如何使用各种 Connector(Kafka, CSV, Socket etc.)&#xff0c;还有一些实际的案例。这些都停留在开发阶段&#xff0c;一旦开发完成&…

office2007每次打开都配置进度_office2007 每次打开word,excel等显示正在配置Office Professional Plus 2007的解决方...

有时候 Office2007打开文档&#xff0c;每次都提示需要安装。配置&#xff0c;配置完成之后&#xff0c;下次打开又需要配置点击取消就不能打开。非常的烦。ffice2007下载后为什么每次打开总需要置&#xff1f;office2007每次打开都要正在配置&#xff1f;其实不需要重新安装可…

mysql命令参数_MySQL命令行参数完整版

MySQL命令行参数完整版mysql教程支持下面的选项&#xff1a;---help&#xff0c;-&#xff1f;显示帮助消息并退出。--batch&#xff0c;-B打印结果&#xff0c;使用tab作为列间隔符&#xff0c;每个行占用新的一行。使用该选项&#xff0c;则mysql不使用历史文件。--character…

consul 文件夹无法显示_consul集群搭建参考

1.官网下载安装包https://releases.hashicorp.com/consul/1.4.3/consul_1.4.3_linux_amd64.zip2.部署节点如下192.168.8.142 sxconsul1192.168.8.143 sxconsul2192.168.8.144 sxconsul33.解压之后的consul是一个可执行文件&#xff0c;复制到/usr/local/bin/ 下4.三台服务器创建…

mysql linux环境安装_MySQL Linux环境的安装配置

在Kali中已经内置了MySQL(镜像可以从mysql.com/downloads/ 下载安装)奇怪的是博主我的kali内置的是mariaDB数据库&#xff0c;所以我也懒得弄MySQL了&#xff01;直接mariaDB吧&#xff01;差不多【PS:据博主所致&#xff0c;mariaDB的操作和MySQL一样哦&#xff01;在这后面有…

mysql not in 转化_[转]mysql里not in语句怎么写 | 学步园

使用mysql中经常会遇到的问题&#xff0c;记录下来转自&#xff1a; http://database.e800.com.cn/articles/2007/630/1183147360019880660_1.htmlselect bid from board where not in (select bid from favorite)但在mysql里就提示SQL语句的语法不对&#xff0c;“...near sel…

java mysql 事物_java基础之MySQL事务和视图

第三节 事务和视图3.1事务事务是用来维护数据库完整性的&#xff0c;它能够保证一系列的MySQL操作要么全部执行&#xff0c;要么全不执行。举一个例子来进行说明&#xff0c;例如转账操作&#xff1a;A账户要转账给B账户&#xff0c;那么A账户上减少的钱数和B账户上增加的钱数必…

define定义的是什么类型_DEFINE_PROFILE用法介绍(1)

“ 长风破浪会有时&#xff0c;直挂云帆济沧海&#xff01;”01—概述可以使用DEFINE_PROFILE定义一个自定义边界配置文件或单元格区域条件&#xff0c;该条件随空间坐标或时间而变化。可以自定义的变量如下:速度&#xff0c;压力&#xff0c;温度&#xff0c;湍流动能&#xf…

如何判断输入的是字符还是数字_[Leetgo]判断字符串是否为数字

题解分析代码实现实现一个函数用来判断字符串是否表示数值(包括整数和小数)。题解分析一个标识数字的字符串可能包括以下字符类型&#xff1a;空格&#xff1b;数组&#xff1a;0~9&#xff1b;正负号小数点幂符号&#xff1a;e/E&#xff1b;为了解决此类问题&#xff0c;需要…

mysql索引优化面试题_mysql索引优化面试题

曾经偷偷的面试了两个单位&#xff0c;都提到了Mysql的优化问题&#xff0c;所以以后要多多学习数据库的优化知识了。建设数据库的优化大概主要就是索引的优化了吧&#xff0c;因为我们不可能修改数据结构的情况下&#xff0c;提高数据库的查询效率似乎也只能用索引了。当然这也…

python 可视化大屏幕_如何用python搭建可视化看板?

可视化看板是指大屏 驾驶舱 dashboard这些吗&#xff0c;如果是&#xff0c;那不建议用python来做&#xff0c;不专业&#xff0c;目前没有见过哪个项目上的大屏是用python做的&#xff0c;它不是万能的大屏的制作一般是这样的先根据用户的需求&#xff0c;所在的行业&#xff…

mysql语句转为sql语句_MySQL 的分页查询 SQL 语句(转)

转自 https://www.cnblogs.com/wbxk/p/10644766.htmlMySQL一般使用 LIMIT 实现分页。基本语句为&#xff1a;SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...在中小数据量的情况下&#xff0c;这样的SQL足够用了&#xff0c;唯一需要注意的问题就是确保使用了索引。举例…

mysql查询选课最少成绩最高_MySQL 练习

最近在学习MYSQL 数据库&#xff0c;在此mark 一下做过的sql 相关练习表结构如下&#xff1a;teacher表tidtnameclass表cidcaptioncourse表cidcnameteacher_idstudent表sidgenderclass_idsnamescore表sidstudent_idcourse_idnumclass :teacher : course : student :score : 根…

mysql中nchar_浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别

1&#xff0c;定义&#xff1a;char&#xff1a; 固定长度&#xff0c;存储ANSI字符&#xff0c;不足的补英文半角空格。nchar&#xff1a; 固定长度&#xff0c;存储Unicode字符&#xff0c;不足的补英文半角空格varchar&#xff1a; 可变长度&#xff0c;存储ANSI字符&…

mysql 5.764_RHEL5.764位源码编译安装MySQL-5.5.42遇到的问题

由于MySQL从5.5之后的版本源码编译安装用cmake, make, make install安装,不用./Configure,make,make install 安装&#xff0c;所以要看下系由于MySQL从5.5之后的版本源码编译安装用cmake, make, make install安装,不用./Configure,make,make install 安装&#xff0c;所以要看…

java 判断子类_java判断class是否是某个类的子类或父类

Class c = ArrayList.class; c.isPrimitive(); //判断c是否为基本数据类型 c.isAssignableFrom(List.class); //判断c是否是List类的子类或父类 c.getGenericType(); //得到泛型类型 免费学习视频分享:java视频教程 实例:通过反射得到List 集合中的泛型类型package com.zf.ta…

java转日期_Java时间日期格式转换

import java.util.*;import java.text.*;importjava.util.Calendar;public classVeDate {/*** 获取现在时间**return返回时间类型 yyyy-MM-dd HH:mm:ss*/public staticString getNowDate() {Date currentTime newDate();SimpleDateFormat formatter new SimpleDateFormat("…