Description

  有两个从小到大排序以后的数组 A 和 B,其中 A 的末端有足够的缓冲空容纳 B。请编写一个方法,将B合并入 A 并排序。

  给定两个有序 int 数组 A 和 B,A 中的缓冲空用0填充,同时给定 A 和 B 的真实大小 int n 和 int m,请返回合并后的数组。

Solutions

1. 排序

  这里注意要从后往前进行排序归并。

# -*- coding:utf-8 -*-
class Merge:
    def mergeAB(self, A, B, n, m):
        # write code here
        a, b = n-1, m-1
        i = 0
        while a >=0 and b >= 0:
            if A[a] >= B[b]:
                A[m+n-1-i] = A[a]
                a -= 1
            else:
                A[m+n-1-i] = B[b]
                b -= 1
            i += 1
        if b >= 0:
            A[:b+1] = B[:b+1]
        return A

References

  1. 有序数组合并