两个数组合并排序python_python算法题---合并两个有序数组
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算法题---合并两个有序数组相关推荐
- C语言算法题 合并两个数组并排序
一.题目内容 给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素. Input 每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示 ...
- python两个数组合并排序_2、合并排序数组
1.问题描述 问题描述:合并两个升序的整数数组A和B,形成一个新的数组,新数组也要有序. 2.问题示例 输入A[1],B=[1],输出[1, 1],返回合并后的数组. 输入A=[2, 4, 6, 7] ...
- python两个数组合并排序_合并Python中的排序数组
假设我们有两个排序数组A和B.我们必须将它们合并并仅形成一个排序数组C.列表的大小可能不同. 例如,假设A = [1,2,4,7]和B = [1,3,4,5,6,8],则合并列表C将为[1,1,2,3 ...
- leetcode算法题--合并两个排序的链表
原题链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/ ListNode* mergeTwoL ...
- leetcode算法题--合并两个有序数组
原题链接:https://leetcode-cn.com/problems/merge-sorted-array/ 尾部双指针 void merge(vector<int>& nu ...
- leetcode算法题--合并两个有序链表
原题链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/ ListNode* mergeTwoLists(ListNode* l1, ...
- Leetcode算法题:两个有序数组求中位数
Leetcode算法题:两个有序数组求中位数 要求时间复杂度为O(log(m+n)) 思路: 暴力解决:合并数组并排序,简单且一定能实现,时间复杂度O(m+n) 由于两个数组已经排好序,可一边排序一边 ...
- 【leetcode】 算法题1 两数之和
[leetcode] 算法题1 两数之和 问题 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums ...
- 求两个数中的最大值最小值算法
给定两个数,用数学运算求出它们两中的最大的数和最小的数,设这两个数为a,b,最大值为max,最小值为min,则有 max = ((a+b)+|a-b|) / 2 ; min = ((a+b)-|a-b ...
最新文章
- (转)SplitContainer 控件(Windows 窗体)
- ET框架笔记 (笑览世界写)(转)
- 你要「老婆」不要?谷歌程序员20行代码把二次元「老婆」带到现实世界
- 互联网日报 | 6月27日 星期日 | B站举办十二周年演讲;特斯拉在华召回285520辆汽车;小鹏汽车将于7月7日在港上市...
- [Java] 蓝桥杯 BASIC-6 基础练习 杨辉三角形
- SpringMVC + security模块 框架整合详解
- ai的利与弊 辩论_为什么AI辩论失败了
- Python项目--飞机作战完整版(附带图片素材)
- python 常微分方程 画向量场_千里积于跬步——流,向量场,和微分方程[转载]...
- 洛谷P5706 【深基2.例8】再分肥宅水(c ,c++混合版)
- 第九周 项目三--稀疏矩阵的三元组表示的实现及应用
- magisk卸载内置软件_Win10自带软件怎么卸载 Win10自带软件卸载方法【详细教程】...
- VMware安装虚拟机详细教程
- [ERROR] Slave SQL for channel ‘‘: Could not execute Write_rows event on table xxx.xxx; Duplicate ent
- 激活函数activation总结
- Python 随堂练习
- OpenCV Mat转dlib array2d
- com.google.zxing图片叠加,二维码生成,图片加文字
- postek二次开发_各类标签一机打尽 博思得C168条码机热促
- Python爬虫:url中带字典列表参数的编码转换
热门文章
- java正则字母下划线数字_由数字、26个英文字母、下划线或汉字的正则表达式
- 利用highchart实现动态饼状图
- RS-485端口静电放电(ESD)保护器件CDSOT23-SM712国产替代
- iPhone14 全系配置曝光,性能惨遭阉割
- 怎样把图片转换成jpg格式?如何完成批量图片格式转换?
- 【湃哒星说安全】后渗透协同平台 Cobalt Strike 常用功能介绍与分析
- ubuntu自带游戏_Ubuntu安装游戏Wesnoth的步骤
- Request Id
- 优雅永不过时-每日签到功能的优雅实现
- 斗鱼php笔试题,斗鱼 Q4 月活用户达 1.74 亿,社区内容生态持续繁荣