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

合并数组

给定两个数组
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]

点赞