合并数组:双针模型,原地实现

102 篇文章 0 订阅
70 篇文章 0 订阅

合并数组

给定两个数组
a = [4,5,6,9,0,0,0]
b = [1,2,3]
最后输出[1, 2, 3, 4, 5, 6, 9]

第一种实现方式双针模型:

def sortTwoSortedArry(a,b):
    b_num = len(b)
    a_num = len(a)-b_num
    
    li = []
    i ,j =0,0
    # 双针模型从左往右扫描,终止条件是,只要任意一个数组走完了,
    # 走完了没有完的那个数组直接接上就行了
    while i<a_num and j <b_num:
        if a[i] <= b[j]:
            li.append(a[i])
            i +=1
        if b[j] < a[i]:
            li.append(b[j])
            j +=1
    # 没走完的直接把尾巴接上去
    li += a[i:a_num]
    li += b[j:b_num]    
    return li

第二种方式原地实现:

def sortTwoSortedArry_in_place(a,b):
    b_num = len(b)
    total_num = len(a)
    a_num = total_num-b_num
    
    # 原地方式,就需要倒着放,这个也是比较一般的思路
    # 原地操作一般想法,一是,取出一个元素放在空中,留出一个空
    # 二是纯粹通过交换来实现
    # 三是,哪里有空位就往哪里放,倒着放是一种思路
    
    # 指向数组a的数组
    i = a_num-1
    # 指向数组b
    j = b_num-1
    # 最终结果的指针
    k = total_num-1
    
    while i >=0 and j>=0:
        if a[i] >= b[j]:
            a[k] = a[i]
            i -=1
            k -=1
            
        if b[j] > a[i]:
            a[k] = b[j]
            j -=1
            k -=1 
    # 把尾巴接上
#    a[:i+1] = a[:i+1]
    a[:j+1] = b[:j+1]

运行结果

a = [4,5,6,9,0,0,0]
b = [1,2,3]
print(sortTwoSortedArry(a,b))
print(a)
sortTwoSortedArry_in_place(a,b)
print(a)


runfile('D:/share/test/arry_and.py', wdir='D:/share/test')
[1, 2, 3, 4, 5, 6, 9]
[4, 5, 6, 9, 0, 0, 0]
[1, 2, 3, 4, 5, 6, 9]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值