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 中。

三.实现流程图

在这里插入图片描述
第一轮循环,p1,p2=0比较2和1的大小,list2的第一个元素更小,把list2的第一个元素放到sorted里面去,此时的指针p2
要向后移一位变成1
在这里插入图片描述
第二轮循环,p1=0,p2=1比较2和3的大小,list1的第一个元素更小,把list1的第一个元素放到sorted里面去,此时的指针p1要往后移一位变成1
在这里插入图片描述
第三轮循环,p1=1,p2=1比较4和3的大小,p2指向的list2元素更小,把list2中p2指向的元素放到sorted里面去,此时的指针p2要往后移一位变成2
在这里插入图片描述

第四轮循环,p1=1,p2=2比较4和9的大小,p1指向的list1元素更小,把list1中p1指向的元素放到sorted里面去,此时的指针p1要往后移一位变成2
在这里插入图片描述
第五轮循环,p1=2,p2=2比较4和9的大小,p1指向的list1元素更小,把list1中p1指向的元素放到sorted里面去,此时的指针p1要往后移一位变成3
在这里插入图片描述
第五轮循环,p1=3,p2=2比较4和9的大小,p1指向的list1元素更小,把list1中p1指向的元素放到sorted里面去,此时的指针p1要往后移一位变成4
在这里插入图片描述
第六轮排序,此时的p1等于list1的长度,说明list1已经遍历完成了,那么此时就直接把list2剩下的元素追加到sorted中去
在这里插入图片描述

四.代码实现

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

六.测试结果

在这里插入图片描述

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Transcend oneself

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

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

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

打赏作者

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

抵扣说明:

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

余额充值