Leetcode 88. 合并两个有序数组 Python3实现(详细注释版本)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

Leetcode 88. 合并两个有序数组 Python3

虽然是一道简单难度的题目,但是要想到这种方式还是不容易,看到官方的答案很赞,就加了很多注释和自己的理解,方便日后复习,同时能帮助其他人就更好啦!如有错误,欢迎指正
Python代码:

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        # 定义三个指针,从后遍历数组,如果遇到B中元素比A中大,就放到P指向的数组位置
        p1 = m - 1
        p2 = n - 1
        p = m + n - 1
        # 两个数组任意一个遍历完,就可以跳出循环
        # 因为A遍历完,说明B中未遍历元素都比A中最小的元素还小,直接执行A[:p2 + 1] = B[:p2 + 1],将B中的元素都放到A中头部即可
        # 如果B遍历完,说明B中的元素都添加到A中的对应位置了,数组合并结束;此时B遍历完成,p2 = -1,因此执行A[:p2 + 1] = B[:p2 + 1],相当于执行[] = [],不造成任何影响,所以nums1[:p2 + 1] = nums2[:p2 + 1]不需要任何条件判定;
        while p1 >= 0 and p2 >= 0:  # 边界判定:索引为0时,是列表的第一个的元素,是需要遍历的
            # 如果B中当前元素大于A中当前元素,将B中当前元素移动到P处,并将p2向前移动一位
            if nums1[p1] <= nums2[p2]:  # 边界判定:当两者相等时,理论上放在p1的前后都可以,但是为了避免p1元素的移动,放在后面效率更高
                nums1[p] = nums2[p2]
                p2 -= 1
            # 如果B中当前元素小于/等于A中当前元素,那么就将当前A中的元素移动到P处(其实就是往后移,为B中更小的元素留出前面的位置),并将p1向前移动一位
            
            else:
                nums1[p] = nums1[p1]
                p1 -= 1
            # 每次循环都将P向前移动,因为每次循环都伴随P的值发生变化,必须往前移,才能不断改变A中元素的位置,达到合并并排序的目的
            p -= 1
        # 针对A可能先遍历完的情况,直接把B中剩余元素放到A的头部位置
        nums1[:p2 + 1] = nums2[:p2 + 1]
LeetCode 简单 数组 python388. 合并两个有序数组 想要看更加舒服的排版、更加准时的推送 关注公众号“不太灵光的程序员” 每日八点有干货推送,微信随时解答你的疑问 88. 合并两个有序数组 python3 简单 数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = . 阅读详情

相关推荐

国产HDMI2.0芯片GSV2011怎么选?手把手教你用它设计音视频采集卡(附FPGA/海思对接指南)

本文详细解析国产HDMI2.0芯片GSV2011在音视频采集卡设计中的应用,涵盖芯片选型、硬件设计要点及与FPGA/海思平台的对接指南。GSV2011凭借4K@60Hz支持、音频提取嵌入功能和高集成度,成为音视频设备的核心选择,助力开发者快速实现高性能采集卡设计。

weixin_30181209的博客 302

LeetCode题目(Python实现):合并两个有序数组

文章目录题目自己的想法算法实现执行结果复杂度分析双指针 / 从前往后算法实现执行结果复杂度分析双指针 / 从后往前算法实现执行结果复杂度分析小结 题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大...

RexT1的博客 1219

【AIGC】COT思维链:让AI学会拆解问题,像人一样思考

COT思维链的出现,为AI的发展开辟了一条新的道路。它让AI学会了像人类一样思考,将复杂问题分解成简单的步骤,并逐步推理出最终答案。希望我的引导会对你产生启发。

智兔唯新的博客 8968

LC 合并两个有序数组 python解答 15% 46%

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

weixin_42375356的博客 2919

LeetCode 题目 88:双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组

LeetCode 题目 88:5中算法双指针\直接\递归\插入排序\归并排序 实现合并两个有序数组

10年数据\经营分析经验,现任大厂数据分析负责人 1296

利用python 完成leetcode88 合并两个有序数组

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

找到工作之前一天十篇的博客 334

leetcode 88. 合并两个有序数组(python3实现)

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

算法探索之路 418

LeetCode面试150——88合并两个有序数组

Leetcode面试经典150题第88合并两个有序数组

Junmo12345的博客 1445

LeetCode88题_合并两个有序数组

给你两个按排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你nums2到nums1中,使合并后的数组同样按排列。最终,合并数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。

qq_40263592的博客 1220

LeetCode88. 合并两个有序数组python

LeetCode88. 合并两个有序数组python) 定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = ...

wk的博客 612

LeetCode-88-合并两个有序数组

题目88要求将两个有序数组合并到第一个数组中。最优解法是使用逆向双指针,从数组末尾开始比较和填充,避免覆盖未处理的元素。时间复杂度O(m+n),空间复杂度O(1)。示例代码展示了Python、Java和Rust的实现,通过比较元素大小从后向前填充,确保合并后的数组有序。该方法高效且不需要额外空间,是解决此类问题的经典方案。

weixin_45980775的博客 669

Leetcode 88. 合并两个有序数组 Python实现

给你两个有序整数数组 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] 来源:力扣(LeetCode) 链

ChengSlime的博客 267

力扣(LeetCode88. 合并两个有序数组 python3

本来这种题不打算写题解的,因为之前做的题别人都有一堆优秀的题解,自己的又臭又长还占时间内存,写完这道题后发现比目前这道题靠前的python3题解代码都短,还是很有成就感的,就是好像运行时间大部分时候都在百分之五十以下,时间复杂度不太会看QAQ不过python之禅都说了,简单易懂就好~下面是题目: 给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 n...

菜鸟的博客 433

Python描述 LeetCode 88. 合并两个有序数组

Python描述 LeetCode 88. 合并两个有序数组   大家好,我叫亓官劼(qí guān jié ),在GitHub & CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在GitHub & CSDN中写博客,唯一博客更新的地址为:亓官劼的博客 ,近期将逐渐同步刷题相关记录到GitHub:[Algorithmic-learning-records] (https://github.com/qiguanjie/Algorithmic-learning-reco

一起加油 759

LeetCode 88 合并两个有序数组

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

sakurasakura1996的博客 275

leetcode-88 | 合并两个有序数组

title: leetcode-88 | 合并两个有序数组 date: 2019-4-23 13:42:04 comments: true categories: “leetcode” tags: - leetcode 简单难度 88. 合并两个有序数组(Merge Sorted Array) 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num...

梦否 400

Python LeetCode(88.合并两个有序数组)

Python LeetCode(88.合并两个有序数组) 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1...

虎口脱险的博客 483

力扣热门算法题 85. 最大矩形,86. 分隔链表,88. 合并两个有序数组

85. 最大矩形,86. 分隔链表,88. 合并两个有序数组,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.24可通过leetcode所有测试用例。

引用原创内容标明出处即可 1203

LeetCode-Python-88. 合并两个有序数组

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

Keep Coding 1786

Leetcode 88.合并两个有序数组的解题思路以及C++、java、python实现

Leetcode 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 ...

Thanours的博客 311

LeetCode 88. 合并两个有序数组(双指针详解 + Java Python 实现

这篇文章详细讲解了LeetCode88题"合并两个有序数组"的两种解法。第一种方法使用临时数组进行归并排序式合并,时间复杂度O(m+n),空间复杂度O(m+n)。第二种更优方法是利用双指针从后往前原地合并,时间复杂度O(m+n),空间复杂度O(1)。文章通过Java/Python代码示例、复杂度分析和优缺点对比,重点推荐了第二种方法,强调其原地合并的特性是面试时应掌握的经典解法。两种方法都采用双指针技术,但后者更符合题目对空间效率的要求。

2603_95532426的博客 236
上一篇: 剑指 Offer 09. 用两个栈实现队列 Python3+Java
下一篇: Leetcode 144.二叉树先序遍历 python3(递归+迭代)
Println30
博客等级 码龄8年 4粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值