leetcode-python-合并两个有序数组

今天第一次电话面试,有点紧张,所以自己感觉表现的不是很好,面试过程中面试官问到了两个算法题,都是leecode上面的题目,而且我都做过,但是当时一下子都想不起来,回答的方法也都是比较傻的方法,尤其是合并两个有序数组的题目,在上个月15日做过,但是今天面试没能好好回答。

以后做leetcode的算法题目的时候,需要将当时解题的思路也要记录,而不是只把题目上传就好。

先看看合并两个有序数组的题目:

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

虽然可以将两个数组加起来,然后进行排序,但是这么做的话,就浪费了两个有序数组这个条件,可以通过归并排序的方式进行合并。

先说说这个题的解题思路以及流程,先看下面的两个列表:

meage_sort.png

如上图的两个列表,先创建一颗空列表m,接着对比指针i,j指向的两个元素的大小,将小的元素append到列表m中,然后把对应的指针加1,重复此步骤,直到某一个指针超出列表索引,将另一个列表中剩下的元素添加到m中。

a = [1,2,3,4,5,6]

b = [2,4,6,8,9,10]

m = []

i,j = 0,0

a[i] < b[j] # 1<2

m.append(a.pop(i)) # m=[1]

a[i] == b[j] # 2 == 2

m.append(a[i]) # m = [1, 2]

a[i] > b[j] # 3 > 2

m.append(b[j]) # m = [1, 2, 2]

# 重复上面的步骤直到某个指针大于索引,将另一个列表中剩下的元素添加到m中

下面我们用代码来实现:

def merge_sort(nums1, nums2):

m = []

i, j = 0, 0

l_1, l_2 = len(nums1)-1, len(nums2)-1

# 当i,j的索引位置小于等于索引最大值的时候

while i <= l_1 and j <= l_2:

if nums1[i] <= nums2[j]:

m.append(nums1[i])

i += 1

else:

m.append(nums2[j])

j += 1

m = m + nums1[i:] + nums2[j:]

return m

if __name__ == '__main__':

n1 = [1, 2, 3, 4, 5]

n2 = [2, 4, 5, 6, 7]

m = merge_sort(n1, n2)

print(m)

# [1, 2, 2, 3, 4, 4, 5, 5, 6, 7]

我们也可以使用Python中的列表方法pop()来进行,只比较每个数组的第一位就可以,每次将两者小的一个数弹出添加到新的列表中,直到有一个列表为空:

def merge_sort(nums1, nums2):

m = []

i, j = 0, 0

while nums1 and nums2:

if nums1[i] <= nums2[j]:

temp = nums1.pop(i)

m.append(temp)

else:

temp = nums2.pop(j)

m.append(temp)

m = m + nums1 + nums2

return m

这种方法其实和上面的思路一样,只是实现方式不同而已。

两个数组合并排序python_python算法题---合并两个有序数组相关推荐

  1. C语言算法题 合并两个数组并排序

    一.题目内容 给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素. Input 每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示 ...

  2. python两个数组合并排序_2、合并排序数组

    1.问题描述 问题描述:合并两个升序的整数数组A和B,形成一个新的数组,新数组也要有序. 2.问题示例 输入A[1],B=[1],输出[1, 1],返回合并后的数组. 输入A=[2, 4, 6, 7] ...

  3. python两个数组合并排序_合并Python中的排序数组

    假设我们有两个排序数组A和B.我们必须将它们合并并仅形成一个排序数组C.列表的大小可能不同. 例如,假设A = [1,2,4,7]和B = [1,3,4,5,6,8],则合并列表C将为[1,1,2,3 ...

  4. leetcode算法题--合并两个排序的链表

    原题链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/ ListNode* mergeTwoL ...

  5. leetcode算法题--合并两个有序数组

    原题链接:https://leetcode-cn.com/problems/merge-sorted-array/ 尾部双指针 void merge(vector<int>& nu ...

  6. leetcode算法题--合并两个有序链表

    原题链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/ ListNode* mergeTwoLists(ListNode* l1, ...

  7. Leetcode算法题:两个有序数组求中位数

    Leetcode算法题:两个有序数组求中位数 要求时间复杂度为O(log(m+n)) 思路: 暴力解决:合并数组并排序,简单且一定能实现,时间复杂度O(m+n) 由于两个数组已经排好序,可一边排序一边 ...

  8. 【leetcode】 算法题1 两数之和

    [leetcode] 算法题1 两数之和 问题   给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums ...

  9. 求两个数中的最大值最小值算法

    给定两个数,用数学运算求出它们两中的最大的数和最小的数,设这两个数为a,b,最大值为max,最小值为min,则有 max = ((a+b)+|a-b|) / 2 ; min = ((a+b)-|a-b ...

最新文章

  1. (转)SplitContainer 控件(Windows 窗体)
  2. ET框架笔记 (笑览世界写)(转)
  3. 你要「老婆」不要?谷歌程序员20行代码把二次元「老婆」带到现实世界
  4. 互联网日报 | 6月27日 星期日 | B站举办十二周年演讲;特斯拉在华召回285520辆汽车;小鹏汽车将于7月7日在港上市...
  5. [Java] 蓝桥杯 BASIC-6 基础练习 杨辉三角形
  6. SpringMVC + security模块 框架整合详解
  7. ai的利与弊 辩论_为什么AI辩论失败了
  8. Python项目--飞机作战完整版(附带图片素材)
  9. python 常微分方程 画向量场_千里积于跬步——流,向量场,和微分方程[转载]...
  10. 洛谷P5706 【深基2.例8】再分肥宅水(c ,c++混合版)
  11. 第九周 项目三--稀疏矩阵的三元组表示的实现及应用
  12. magisk卸载内置软件_Win10自带软件怎么卸载 Win10自带软件卸载方法【详细教程】...
  13. VMware安装虚拟机详细教程
  14. [ERROR] Slave SQL for channel ‘‘: Could not execute Write_rows event on table xxx.xxx; Duplicate ent
  15. 激活函数activation总结
  16. Python 随堂练习
  17. OpenCV Mat转dlib array2d
  18. com.google.zxing图片叠加,二维码生成,图片加文字
  19. postek二次开发_各类标签一机打尽 博思得C168条码机热促
  20. Python爬虫:url中带字典列表参数的编码转换

热门文章

  1. java正则字母下划线数字_由数字、26个英文字母、下划线或汉字的正则表达式
  2. 利用highchart实现动态饼状图
  3. RS-485端口静电放电(ESD)保护器件CDSOT23-SM712国产替代
  4. iPhone14 全系配置曝光,性能惨遭阉割
  5. 怎样把图片转换成jpg格式?如何完成批量图片格式转换?
  6. 【湃哒星说安全】后渗透协同平台 Cobalt Strike 常用功能介绍与分析
  7. ubuntu自带游戏_Ubuntu安装游戏Wesnoth的步骤
  8. Request Id
  9. 优雅永不过时-每日签到功能的优雅实现
  10. 斗鱼php笔试题,斗鱼 Q4 月活用户达 1.74 亿,社区内容生态持续繁荣