草庐IT

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

Transcend oneself 2023-04-21 原文

合并两个有序列表

一.需求:

给你两个按非递减顺序排列的整数列表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

六.测试结果

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

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  5. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  6. ruby - RVM 使用列表[0] - 2

    是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论

  7. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  8. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  9. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  10. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

随机推荐