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)
        



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值