python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路

这篇具有很好参考价值的文章主要介绍了python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.需求:

给你两个按非递减顺序排列的整数列表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 = o输出:[1]
解释:需要合并[1]和[] 。合并结果是[1] 。

示例3:
输入: nums1 = [0],m = 0,nums2 = [1],n = 1输出:[1]
解释:需要合并的数组是[]和[1]。合并结果是[1]。
注意:因为 m = 0 ,所以nums1中没有元素。nums1中仅存的0仅仅是为了确保合并结果可以顺利存放到nums1 中。

三.实现流程图

python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路
第一轮循环,p1,p2=0比较2和1的大小,list2的第一个元素更小,把list2的第一个元素放到sorted里面去,此时的指针p2
要向后移一位变成1
python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路
第二轮循环,p1=0,p2=1比较2和3的大小,list1的第一个元素更小,把list1的第一个元素放到sorted里面去,此时的指针p1要往后移一位变成1
python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路
第三轮循环,p1=1,p2=1比较4和3的大小,p2指向的list2元素更小,把list2中p2指向的元素放到sorted里面去,此时的指针p2要往后移一位变成2
python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路

第四轮循环,p1=1,p2=2比较4和9的大小,p1指向的list1元素更小,把list1中p1指向的元素放到sorted里面去,此时的指针p1要往后移一位变成2
python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路
第五轮循环,p1=2,p2=2比较4和9的大小,p1指向的list1元素更小,把list1中p1指向的元素放到sorted里面去,此时的指针p1要往后移一位变成3
python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路
第五轮循环,p1=3,p2=2比较4和9的大小,p1指向的list1元素更小,把list1中p1指向的元素放到sorted里面去,此时的指针p1要往后移一位变成4
python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路
第六轮排序,此时的p1等于list1的长度,说明list1已经遍历完成了,那么此时就直接把list2剩下的元素追加到sorted中去
python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路

四.代码实现

nums1 = [2, 4, 5, 8]  # 这里的0是占的位置
nums2 = [1, 3, 9]
m = 4  # nums的长度
n = 3  # nums2的长度
p1, p2 = 0, 0  # 定义两个指针索引
def sorted_merge(nums1, nums2, m, n, p1, p2):
    sorted = []  # 遍历之后的结果
    while p1 < m or p2 < n: 
        if p1 == m:
            sorted.append(nums2[p2])
            p2 += 1
        elif p2 == n:
            sorted.append(nums1[p1])
            p1 += 1
        elif nums1[p1] < nums2[p2]:
            sorted.append(nums1[p1])
            p1 += 1
        else:
            sorted.append(nums2[p2])
            p2 += 1
    print(sorted)
    nums1[::] = sorted
    print(nums1)


sorted_merge(nums1, nums2, m, n, p1, p2)

五.代码思路

首先需要创建一个新的列表来存储遍历排序的结果,定义两个指针p1和p2用来控制列表的遍历,而那个while循环的条件就是为了让两个元素个数不同的列表能够都遍历完所有元素,如果list1或者list2其中一个列表元素已被遍历排序完,而另一个列表还存有元素,那么就可以把另一个列表剩下的元素直接追加到我们的sorted存放最终结果的列表中去,最后因为它需要把合并后的结果放到nums1中,所以我们这里直接使用列表的切片方式对nums1从头到尾进行切片,相当于将sorted深拷贝给nums1

六.测试结果

python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路文章来源地址https://www.toymoban.com/news/detail-408098.html

到了这里,关于python实现+leetcode题+合并两个有序列表超详细流程图分析以及代码思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode88——合并两个有序数组

    给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。 为了应对这种情况

    2024年02月08日
    浏览(27)
  • LeetCode 0088. 合并两个有序数组

    力扣题目链接:https://leetcode.cn/problems/merge-sorted-array/ 给你两个按 非递减顺序 排列的整数数组  nums1 和 nums2 ,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意: 最终,合并后数组不应由

    2024年02月13日
    浏览(41)
  • Leetcode. 88合并两个有序数组

    合并两个有序数组 核心思路: 依次比较,取较小值放入新数组中 i 遍历nums1 , j 遍历nums2 ,取较小值放入nums3中 那如果nums[i] 和nums[j]中相等,随便放一个到nums3 那如果nums[i] 和nums[j]中相等,随便放一个到nums3 此时 nums1 中的元素已经走完了,那么直接把 nums2 中剩下的元素拿到

    2023年04月08日
    浏览(89)
  • Leetcode 21. 合并两个有序链表

    题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/description/ 两个链表都是升序链表,新建一个链表,引入伪头节点作为辅助节点,将各节点添加到伪节点之后,再用一个cur节点指向新链表的末尾 遍历两个链表,对比每个节点值,将更小的链表节点加入到新链表中 如果其中一

    2024年02月13日
    浏览(32)
  • LeetCode 21.合并两个有序链表

    题目链接 👉 LeetCode 21.合并两个有序链表👈 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 取小的进行尾插 👇 图解 👇 取小的进行尾插 👇 图解 👇 🥰 希望烙铁们能够理解欧! 总结🥰 以上就是本题讲解的全部内

    2024年02月13日
    浏览(37)
  • LeetCode21.合并两个有序链表

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 : 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 创建一个新的链表头节点(dummyNode)和一个指针current,用于表示当前节点。 在一个while循环中,比较两个链表的节

    2024年02月20日
    浏览(32)
  • LeetCode_88. 合并两个有序数组

    目录 题目描述 思路分析 我的题解 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储

    2023年04月15日
    浏览(34)
  • ​LeetCode解法汇总88. 合并两个有序数组

    https://github.com/September26/java-algorithms 给你两个按  非递减顺序  排列的整数数组  nums1   和  nums2 ,另有两个整数  m  和  n  ,分别表示  nums1  和  nums2  中的元素数目。 请你  合并   nums2   到  nums1  中,使合并后的数组同样按  非递减顺序  排列。 注意: 最终,合并

    2024年02月12日
    浏览(33)
  • Leetcode每日一题——“合并两个有序数组”

    各位CSDN的uu们你们好呀,又到小雅兰的愉快题解时候啦,今天,我们的题目内容是合并两个有序数组,下面,让我们进入合并两个有序数组的世界吧 示例 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

    2023年04月24日
    浏览(55)
  • LeetCode面试算法-力扣 88. 合并两个有序数组

    88. 合并两个有序数组 题目描述     给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意: 最终,合并后数组不应由函数返回,而是存储

    2024年02月10日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包