【Leetcode:88. 合并两个有序数组 + 双指针】

C++合并有序数组 合并有序数组 【问题描述】编写一个程序,将两个元素从小到大有序的一维数组归并成一个有序的一维数组。 【输入形式】用户在第一行输入第一个有序数组的元素数目,以回车结束此输入。然后在第二行按照刚才输入的元素数目依次输入数组元素,中间用空格分隔,最后用回车结束输入。第三行和第四行只需重复刚才的步骤,将第二个有序数组也输入即可。输入时候一定是有序输入的,即数组元素已经按照从小到大顺序排列。 【输出形式】程序将两个有序一维数组合并为一个有序数组并按照从小到大顺序输出。每个元素输出时用空格分隔,最后一个输出之后没有空格 阅读详情

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,优快云-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🚩 题目链接

⛲ 题目描述

给你两个按 非递减顺序 排列的整数数组 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 <= nums1[i], nums2[j] <= 109

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

🌟 求解思路&实现代码&运行结果


⚡ 双指针

🥦 求解思路
  1. 题目要求通过时间复杂度为 O(m + n) 的算法解决此题。合并数组后的长度是数组nums1的长度,直接在数组nums1上操作,此时开辟一个全局的指针,指针的大小指向数组num1的末尾。
  2. 因为数值1和数组2都是非递减顺序,此时俩个指针分别指向num1和nums2实际元素的位置也就是题目中给定的m和n,开始判断元素的大小,如果此时nums1中的元素大于nums2中的元素,此时移动nums1中的元素到此时全局指针指向的位置,反之,移动nums2中的元素到全局指针指向的位置。
  3. 如果其中任意一个指针指向数组的开始位置,循环结束,如果是num1中的指针到达开始位置,此时将nums2中剩余元素移动到nums1中。相反,同理。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下的解法。
🥦 实现代码
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int index = nums1.length;
        while (m > 0 && n > 0) {
            if (nums1[m - 1] > nums2[n - 1]) {
                nums1[--index] = nums1[--m];
            } else {
                nums1[--index] = nums2[--n];
            }
        }
        while (m > 0) {
            nums1[--index] = nums1[--m];
        }
        while (n > 0) {
            nums1[--index] = nums2[--n];
        }
    }
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

Java实现合并两个有序数组 算法的基本思想是创建一个新的数组,然后按照顺序从两个输入数组中选择较小的元素,并将其放入新数组中。通过重复这个过程,直到遍历完所有的元素,我们就得到了一个合并后的有序数组。首先,让我们来解决一个常见的问题:如何将两个有序数组合并成一个有序数组。这个算法的时间复杂度是O(m+n),其中m和n分别是两个输入数组的长度。希望这篇文章能够帮助你理解如何使用Java实现将两个有序数组合并成一个有序数组的算法。当其中一个数组遍历完后,我们将剩余数组中的元素依次放入。,它的长度是两个输入数组的长度之和。 阅读详情

相关推荐

java实现把两个有序数组合并到一个数组的实例

今天小编就为大家分享一篇java实现把两个有序数组合并到一个数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

合并两个有序数组的三种方法

标题 这是关于C语言如何合并两个有序数组的三种方法 方法一: 将两个有序数组a和b容纳到另一个数组c中 算法思想:创建一个新数组c,把有序数组a和有序数组b中的元素放到新创建的数组c中,然后利用冒泡排序把数组c中的元素进行有序排序。 代码实现如下: 代码运行结果为 方法二: 将两个有序数组a和b容纳到另一个数组c中 算法思想:创建一个新的数组c,此数组的大小大于或等于已知两个数组之和。通过比...

Lchilde的博客 4万+

从光斑图到锤形优化:一次搞定Zemax双胶合透镜的像散与场曲问题

本文详细解析了Zemax双胶合透镜设计中像散与场曲问题的诊断与优化方法。从光斑图分析到锤形优化技巧,提供了完整的光学设计实战指南,帮助设计师快速定位问题并有效改善系统性能,特别适合光学设计工程师和Zemax使用者参考。

weixin_27134495的博客 232

如何快速合并两个有序数组?

前言 大家好,我是来自于「华为」的「程序员小熊」。今天给大家带来一道与「数组」相关的题目,这道题同时也是字节、微软和亚马逊等互联网大厂的面试题,即力扣上的第 88 题-合并两个有序数组。 本文主要介绍「逆向双指针」的策略来解答此题,供大家参考,希望对大家有所帮助。 合并两个有序数组 题目描述 示例1: 输入:nums1=[1,2,3,0,0,0],m=3,nums2=[2,5,6],n=3 输出:[1,2,2,3,5,6] 示例2: 输入:nums1=[1]...

5131

脑机接口最新发展动态报告 (2024-2025)

脑机接口动态

高山 4106

ZYNQ实战:如何用AXI-stream FIFO解决跨时钟域数据同步难题(附完整代码)

本文深入探讨了在ZYNQ项目中,如何利用AXI-Stream FIFO有效解决PS与PL之间的跨时钟域数据同步难题。文章详细分析了异步FIFO的架构设计、关键配置参数,并提供了PS端软件策略与PL端逻辑设计的完整代码示例,旨在帮助开发者构建稳定可靠的数据流通道,优化系统性能。

nginx7reverse的博客 754

LeetCode刷题:双指针 [88.合并两个有序数组] - Java版本

两个指针对应的值进行比较,每次将较大的那个数字复制到 nums1 的后边,然后向前移动一位。 因为我们也要定位 nums1 的末尾,所以我们还需要第三个指针,以便复制。

weixin_51909882的博客 380

告别WSL!实测AMD ROCm7预览版在Windows下跑ComfyUI,速度提升与避坑全记录

本文详细记录了在Windows原生环境下部署AMD ROCm7+PyTorch+ComfyUI的全流程,相比WSL环境性能显著提升。涵盖硬件兼容性确认、开发环境配置、Python环境搭建、ComfyUI部署优化及性能对比测试,为AI绘图爱好者提供实用指南。

weixin_42528090的博客 670

Leetcode:88. 合并两个有序数组——Java暴力解法&双指针

注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。i指针从nums1的第一个0元素即nums[m]处开始遍历。定义两个指针,i指向nums1,j指向nums2。上一个方法没有利用到nums1和nums2已然有序的特点。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。需要合并 [1,2,3] 和 [2,5,6]。需要合并的数组是 [] 和 [1]。需要合并 [1] 和 []。中,使合并后的数组同样按。

2301_78566776的博客 995

成分数据的闭合效应对地球化学数据的影响及其解决方案

封闭效应 (Closure Effect),也称为常数和效应 (Constant Sum Effect),是地球化学数据分析中一个需要特别注意的统计现象。它的产生是由于我们通常使用成分数据 (Compositional Data)百分比 (%)百万分率 (ppm)由于这些数据表示的是各组分占总体的比例,它们的总和必然是一个常数 (例如 100% 或 1,000,000 ppm)。这意味着每个元素的含量不是独立的,而是与其他元素的含量相互制约。改变其中一个元素的含量必然会影响其他元素的相对比例。

qq_59349063的博客 1535

小众但实用:Python爬取钉钉/企业微信消息,实现办公数据自动化采集(完整版)

钉钉/企业微信的办公数据自动化采集,属于「小众但极度实用」的Python技巧——它不像爬虫爬取电商/网页数据那样被广泛关注,但能直接解决职场人的「刚需痛点」,把每天1-2小时的手动数据整理工作,变成「一键自动化完成」。这套技巧的核心价值,不在于「技术有多高深」,而在于「能真正落地、能真正提升效率」—— 几行简单的Python代码,就能解放双手,让你从繁琐的重复工作中解脱出来,专注于更有价值的核心工作。更重要的是:所有的技术和代码,都是基于「合规合法」的前提,守住了技术的底线,也守住了职场的原则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1931

LeetCode 88:合并两个有序数组 | 双指针从后向前求解

合并两个有序数组是一个看似简单但蕴含重要算法思想的经典问题。从后往前的双指针技巧不仅解决了原地合并的问题,还展示了在数组操作中如何避免数据覆盖的风险。这个技巧在许多类似问题中都有应用,是算法学习中必须掌握的基础技能。通过本文的分析,希望读者能够深入理解双指针法在有序数组问题中的应用,并将其推广到更多类似的算法问题中。合并有序序列的思路是许多复杂算法的基础,掌握这些基础技巧对于提升整体算法能力至关重要。

cannonjinx的博客 4584

第14.1章 高翔博士2025年11月最新开源框架Lightning-LM源码学习解读(一):激光-IMU定位+建图算法各模块简介

Lightning-LM:高效激光SLAM定位系统 该框架基于模块化设计,通过激光-IMU融合实现快速建图与定位,核心特点包括: 极速性能:纯CPU运行(建图1.2核/定位0.8核) 模块化架构:包含激光里程计(LIO)、地图管理、回环检测等独立模块 动态场景支持:地图分块加载、动静态图层分离 多模式适配:支持ROS2环境下的在线/离线运行 关键模块包括前端里程计(core/lio)、2D/3D地图转换(core/g2p5)、轻量优化库(core/miao)等,通过系统控制器(core/system)协调流

行知SLAM 2438

思维导图整理大厂面试高频数组24: 合并两个有序数组的两种双指针思想, 力扣88

此专栏文章是对力扣上算法题目各种方法的总结和归纳, 整理出最重要的思路和知识重点并以思维导图形式呈现, 当然也会加上我对导图的详解. 目的是为了更方便快捷的记忆和回忆算法重点(不用每次都重复看题解), 毕竟算法不是做了一遍就能完全记住的. 所以本文适合已经知道解题思路和方法, 想进一步加强理解和记忆的朋友, 并不适合第一次接触此题的朋友(可以根据题号先去力扣看看官方题解, 然后再看本文内容). 关于本专栏所有题目的目录链接, 刷算法题目的顺序/注意点/技巧, 以及思维导图源文件问题请点击此链接. 想进大厂.

孤柒的博客 6424

uniapp - 实现集成调用zebra斑马打印机+打印标签+打印二维码详细实例代码,通过蓝牙连接打印机打印与通过打印机IP和端口两种方式适配斑马打印机(全平台兼容H5、微信小程序、苹果安卓App)

uniapp适配斑马打印机 实现标签打印,uniapp适配斑马打印机实现标签打印,uniapp调用zebra斑马打印机打印标签,uniApp连接传统蓝牙的斑马打印机打印,实现标签打印功能uniapp 蓝牙连接斑马打印机发送zpl指令打印,适配斑马(Zebra)牌打印机,小程序调用蓝牙打印机完整代码,uniapp 打印机wifi链接 蓝牙链接,uniapp斑马打印机,实现二维码标签展示以及打印,APP端连接打印机打印小票和标签,uniapp使用斑马打印中文不出来,打印机连接不上,打印没反应怎么办,打印报错,斑

🏆 前端领域优质创作者 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LeetCode:88. 合并两个有序数组(双指针 Java)

此题不要用sort现成的去写,不然就简单了,用双指针去写,跟别指向末尾有效元素,比较,然后将大的插入到num1末尾,并且同时移动指针。

Cosmoshhhyyy的博客 558

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode 88:合并两个有序数组 。 双指针解法

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

前端小白, 稀土:雩风十六 488

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【码道初阶】Leetcode88一道简单题引发的双指针思考——从逆向双指针到完美合并:剖析两个有序数组合并的经典解法

给定两个按非递减顺序排列的整数数组nums1和nums2,要求将nums2合并到nums1中,并保证合并后的数组仍然有序。

月明长歌的博客 1430

LeetCode 88题解析:逆向双指针法合并有序数组的算法精讲

在算法与数据结构中,双指针技巧是处理有序序列合并、查找等问题的核心方法之一,其原理在于通过两个或多个指针的协同移动,在单次遍历中高效完成任务,从而将时间复杂度优化至线性级别。这种技术价值在于能够在不使用额外空间或仅使用常数空间的情况下,实现数据的原地操作,极大地提升了空间效率,尤其适用于内存受限的嵌入式系统、大规模数据处理等场景。例如,在合并两个有序数组时,传统的从前往后合并方法容易导致数据覆盖,而逆向双指针法从数组末尾开始操作,巧妙利用了预留空间,避免了冲突,这正是解决LeetCode第88题“合并两个有

weixin_32822843的博客 668

Leetcode 刷题之路 之 算法思想 一、双指针 : 5) 88. 合并两个有序数组

题目描述: 88. 合并两个有序数组 难度简单 给你两个有序整数数组nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组。 说明: 初始化nums1和nums2的元素数量分别为m和n。 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存nums2中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n =...

qq_41760343的博客 225

LeetCode题解:88. 合并两个有序数组,双指针+从后往前,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/merge-sorted-array/ 解题思路: 可参考官方题解的“方法三 : 双指针 / 从后往前”。 如果从nums1的最后一位按从大到小顺序往前存,最后一定会得到正确排序的数组,且不会有重复。 使用双指针从后往前遍历,遍历完任意一个数组的有效值后退出。 由于nums1已经排序,遍历完成之后,只需要判断nums2是否完成遍历即可。 /** * @param {number[]} nums1 * @param {numb

Lee Chen的博客 250

【算法:leetcode】双指针:167. 两数之和 II - 输入有序数组 、88. 合并两个有序数组

贪心:122. 买卖股票的最佳时机 II 、121. 买卖股票的最佳时机

xuwenjie的博客 275

LeetCode 88题深度解析:原地合并有序数组的双指针技巧与边界处理

在算法与数据结构中,双指针是一种高效处理有序序列的常用技巧,其核心原理是通过两个或多个指针协同遍历,在单次扫描中完成比较与操作,从而将时间复杂度优化至线性级别。这种技术在处理数组、链表等线性结构时价值显著,尤其适用于合并、查找、去重等场景。例如,在合并两个已排序数组时,双指针法能避免不必要的元素移动,实现O(m+n)的时间复杂度。本文将以经典的原地合并问题(如LeetCode 88题)为例,深入剖析从后向前遍历的指针策略,并探讨其在面试中的高频考察点,如边界条件处理和空间复杂度优化。通过理解数组操作与指针协

weixin_31412781的博客 293

双指针算法(四):力扣 88.合并两个有序数组 | 经典例题

题目描述 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。 示例 示例一: 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 示例二: 输入:nums1 = [1]

比特的一天 284

每日LeetCode打卡:88. 合并两个有序数组——双指针

每日LeetCode打卡:88. 合并两个有序数组——双指针

Monologue_mu的博客 142

算法|合并两个有序数组

力扣第88题:https://leetcode-cn.com/problems/merge-sorted-array/ 题目描述: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应

flystar27的博客 1163
上一篇: 【Leetcode:79. 单词搜索 + dfs】
下一篇: 【Leetcode:2. 两数相加 + 链表】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值