Метод а: содержание В копируются непосредственно в оставшемся пространстве А, а затем сортировать А быстрое применение.
Сложность Время: О (т + п) журнал (т + п)
код следующим образом :
class Solution:
def merge(self, A, m, B, n):
A[m:] = B
A.sort()
return A
Метод два: двойной указатель
, используя два указателя указывают на два массива A и B, начиная с самого начала элементов массива двух размеров, малого рода в новый массив, а
код выглядит следующим образом :
class Solution:
def merge(self, A, m, B, n):
a = 0
b = 0
sort = []
while a < m or b < n:
if a == m:
sort.append(B[b])
b += 1
elif b == n:
sort.append(A[a])
a += 1
elif A[a] <= B[b]:
sort.append(A[a])
a += 1
else:
sort.append(B[b])
b += 1
A[:] = sort
return A
Способ третий: обратный двойной указатель (модификации на месте, дополнительного пространства хранения в)
для массива A и B массива расположены указатель а, б. A Начальная точка последнего элемента в массиве А, то есть а = м-1, B изначально указывает на последний элемент в массиве B, т.е., B = N-1; сравните элемент указателя и указатель б для размера элемента, большой наиболее массива в положение элемента (то есть, т + п-1 позиция). И последовательный порядок вставки элементов.
Код выглядит следующим образом:
class Solution:
def merge(self, A, m, B, n):
a, b = m - 1, n - 1
tail = m + n - 1
while a >=0 or b >= 0:
if a == -1:
A[tail] = B[b]
b -= 1
# n -= 1
elif b == -1:
A[tail] = A[a]
a -= 1
# m -= 1
elif A[a] <= B[b]:
A[tail] = B[b]
b -= 1
# n -= 1
else:
A[tail] = A[a]
a -= 1
# m -= 1
tail -= 1
return A