【数组】Leetcode 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 中的元素。

解题思路

nums1数组后面是空的,将比较大的元素挨个放入nums1后面空的数组中,同时空出前面的位置

  • 1、由于nums1和nums2都是按非递减顺序排列的,因此可以使用双指针法合并两个数组。
  • 2、初始化两个指针,分别指向nums1和nums2的末尾元素,以及合并后的数组nums1的末尾。
  • 3、从后向前遍历nums1和nums2,比较指针指向的元素大小,将较大的元素放入合并后的数组nums1的末尾,并将对应指针向前移动一位。
  • 4、如果nums2中还有剩余元素未合并,将其依次放入合并后的数组nums1的前面位置。

java实现

public class MergeSortedArray {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = m-1;int p2 = n-1;int p = m+n-1;while(p1>=0 && p2>=0){if(nums1[p1]>=nums2[p2]){//先赋值,后--nums1[p--] = nums1[p1--];}else {nums1[p--] = nums2[p2--];}}//如果nums2中还有剩余元素,将其合并到nums1中while (p2>=0){nums1[p--] = nums2[p2--];}}public static void main(String[] args) {MergeSortedArray merger = new MergeSortedArray();// Test Case 0代表空置位置int[] nums1 = {1, 2, 3, 0, 0, 0};int[] nums2 = {2, 5, 6};int m = 3;int n = 3;merger.merge(nums1, m, nums2, n);System.out.println("Merged Array 1: " + Arrays.toString(nums1));// Expected: [1, 2, 2, 3, 5, 6]}
}

时间空间复杂度

  • 时间复杂度:合并过程只需一次遍历,时间复杂度为O(m + n),其中m和n分别为nums1和nums2的长度。

  • 空间复杂度:仅使用了常数额外空间,空间复杂度为O(1)。

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

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

相关文章

内核workqueue框架

workqueue驱动的底半部实现方式之一就是工作队列,作为内核的标准模块,它的使用接口也非常简单,schedule_work或者指定派生到哪个cpu的schedule_work_on。 还有部分场景会使用自定义的workqueue,这种情况会直接调用queue_work和qu…

探索C++模板类的奥秘:从基础到实践的深度之旅

目录 引言 一、模板类基础 A. 何为模板类? B. 模板类与普通类的区别 二、模板类实例化及特化 C. 实例化模板类 D. 模板类特化 三、模板类的应用与实战 E. 示例分析:栈模板类实现 结论 引言 在C编程的世界里,模板这一特性如同魔法般…

wpf转换器

WPF(Windows Presentation Foundation)中的转换器主要是指IValueConverter接口的实现,它用于在数据绑定过程中转换源数据和目标数据的类型或表示形式。这种机制使得开发者能够灵活地处理数据,特别是在用户界面(UI&…

基于SkyEye运行Android——应用最为广泛的移动设备操作系统

01.Android简介 Android(安卓)是一种基于Linux内核(不包含GNU组件)的开源操作系统,最初由安迪鲁宾开发,主要支持手机。2005年8月由Google收购注资;2007年11月,Google与84家硬件制造…

【C语言】/*函数栈帧的创建和销毁*/

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题: 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的,传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

常见的压缩工具:gzip bzip xz zip

目录标题 1. gzip2. bzip23. xz4. zip5. 总结 在数字化时代,数据的存储和传输变得越来越重要。为了节省存储空间和提高数据传输效率,压缩工具成为了必备的工具之一。 1. gzip gzip是一种常见的文件压缩工具,它使用DEFLATE算法进行压缩。gzi…

vue3--element-plus-抽屉文件上传和富文本编辑器

一、封装组件 article/components/ArticleEdit.vue <script setup> import { ref } from vue const visibleDrawer ref(false)const open (row) > {visibleDrawer.value trueconsole.log(row) }defineExpose({open }) </script><template><!-- 抽…

SSM+Vue+小程序+基于微信小程序的高校学生事务管理系统

项目配合学校日常生活通知&#xff0c;考试等管理需要&#xff0c;开发学校事务管理系统&#xff0c;maven管理依赖&#xff0c;mybatis处理数据库交互 学校管理 学院管理 班级管理 年级管理 教师管理 通知公告管理 学生资料管理 待办事项管理 教务处通知管理 讲座通…

CSS的哪些样式可以继承?哪些不可以?

在 CSS 中&#xff0c;有一些样式是可以被子元素继承的&#xff0c;也有一些样式是不会被子元素继承的。以下是一些常见的具有继承性质的样式和不具有继承性质的样式的汇总&#xff1a; 具有继承性质的样式&#xff1a; color&#xff1a;文字颜色可以被子元素继承。font-fam…

OpenCV(一) —— OpenCV 基础

1、OpenCV 简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个基于 BSD 许可开源发行的跨平台的计算机视觉库。可用于开发实时的图像处理、计算机视觉以及模式识别程序。由英特尔公司发起并参与开发&#xff0c;以 BSD 许可证授权发行&#xff0c…

网络知识点之—QoS

QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;指一个网络能够利用各种基础技术&#xff0c;为指定的网络通信提供更好的服务能力&#xff0c;是网络的一种安全机制&#xff0c; 是用来解决网络延迟和阻塞等问题的一种技术。QoS的保证对于容量有限的网络来…

C++11:右值引用和左值引用

1.decltype decltype可以推导出一个表达式的类型&#xff0c;可以用这个类型定义变量。 测试代码 template<class T1,class T2> void test1(T1 &a,T2 & b) {decltype(a* b) ret;cout << typeid(ret).name() << endl; } 2.范围for void test2()…

上位机图像处理和嵌入式模块部署(树莓派4b部署java环境)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 通常我们都会认为java是部署在pc服务器上面的&#xff0c;或者是用java开发android应用程序。其实不然&#xff0c;java也可以部署在嵌入式开发板子…

前端工程化03-贝壳找房项目案例JavaScript常用的js库

4、项目实战&#xff08;贝壳找房&#xff09; 这个项目包含&#xff0c;基本的ajax请求调用,内容的渲染&#xff0c;防抖节流的基本使用&#xff0c;ajax请求工具类的封装 4.1、项目的接口文档 下述接口文档&#xff1a; 简述内容baseURL&#xff1a;http://123.207.32.32…

ESP32 烧录固件

第一步&#xff1a;下载固件 git clone --recursive https://github.com/espressif/esp-at.git 第二步&#xff1a;执行编译 在该目录执行 python build.py install 如图&#xff1a; 第三步&#xff1a;选择芯片 输入2 第四步&#xff1a;选择固件 输入1 第五步&#…

error LNK2001: 无法解析的外部符号 “__declspec(dllimport) public: __cdecl ......

运行程序时&#xff0c;报如上图所示错误&#xff0c;其中一条是&#xff1a; ReflectionProbe.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl osg::Object::Object(bool)" (__imp_??0ObjectosgQEAA_NZ) 报这个错误一般是因为…

【Python快速上手(十三)】

目录 Python快速上手&#xff08;十三&#xff09;Python3 lambda函数和装饰器Python3 lambda函数定义 lambda 匿名函数使用 lambda 匿名函数注意事项 Python3 装饰器装饰器的定义装饰器的用法装饰器的应用场景注意事项 Python快速上手&#xff08;十三&#xff09; Python3 l…

银行ETL-监管报送

1104报表 1104报表主要包括&#xff1a;资产负债&#xff0c;表外业务、流动性风险、贷款质量、投向行业和地区、重点客户等。 1104报表分类 普通报表、机构特色类报表。 反洗钱 大额交易、可疑交易。标签分类&#xff1a;疑似犯罪、疑似毒品、疑似传销。 反洗钱—接口报…

线性表及其基本运算

线性表是计算机科学中一种重要的数据结构&#xff0c;被广泛应用于各种计算任务中。它定义为一种有序的存储结构&#xff0c;由一系列相同数据类型的元素组成&#xff0c;可以顺序访问和操作&#xff0c;元素可以通过索引来查找和修改。 线性表的具体概念如下&#xff1a; 线…

揭秘Fabric交易流程:一文带你深入了解

随着区块链技术的日益普及&#xff0c;Hyperledger Fabric作为一种联盟链解决方案&#xff0c;受到了广泛关注。那么&#xff0c;Fabric的交易流程究竟是怎样的呢&#xff1f;本文将为您一一揭晓。 1. Fabric交易的参与方 客户端&#xff1a;交易流程的发起方&#xff0c;发起…