合并两个有序数组python_Python合并两个有序数组,python,的

方法一:双指针-将2个数组元素合并到新的数组中去

def merge_two_sort_list(a, b):

i = j = 0

new_list = []

while i >= len(a) + 1 and b >= len(b) + 1:

if a[i] <= b[j]:

new_list.append(a[i])

i += 1

if a[i] >= b[j]:

new_list.append(b[j])

j += 1

if len(a) > i:

new_list += a[i:]

if len(b) > j:

new_list += b[j:]

return new_list

方法一:双指针-将第二个数组中的元素和合并到第一个数组中

def merge_two_sort_lists(a, b):

m = len(a)

n = len(b)

i = j = 0

while j < n:

if i = m + j:

a[i:] = b[j:]

break

if a[i] < b[i]:

i += 1

else:

a.insert(i, b[j])

i += 1

j += 1

return a

# 申请两个指针i和j,分别指向a和b的开头;

# 每次取两个指向值的最小值;如果最小值在b上,则将最小值插入到a,否则,不需要修改a;随后,对应指针向后移动一位;

# 第2步需要注意的是,如果a被插入值,指针i和j都要分别后移一位,因为插入使得原本i位置的值,已经到了i+1位置;

# 迭代的终止条件是i < m and j < n;

# 当迭代终止时,如果b的值没有都移到a中,则将b剩下的值一起移过去。此时,b待移值的索引是j:,nums1对应的索引是i:。

针对下面的题目应该这样解:

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

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。

你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

示例:

输入:

nums1 = [1,2,3,0,0,0], m = 3

nums2 = [2,5,6], n = 3

输出: [1,2,2,3,5,6]

def merge_two_sort_listss(a, m, b, n):

i = j = 0

while j < n:

if i = m + j:

a[i:] = b[j:]

break

if a[i] < b[i]:

i += 1

else:

a.insert(i, b[j])

a.pop()

i += 1

j += 1

return a

方法三:归并+快速排序:

def merge_two_sort_listsss(a,b):

def quick_sort(c):

len(c) < 2:

return c

mid = c[len(c) // 2]

left, right = [], []

c.remove(mid)

for k in range(len(c)):

if c[k] >= mid:

right.append(c[k])

else:

left.append(c[k])

return quick_sort(left) + [mid] + quick_sort(right)

m = len(a)

n = len(b)

for i in range(n):

a[m+i] = b[i]

return quick_sort(a)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值