题目描述
代码
由于在题目中规定了A的数组空间的大小为m+n,所以根据题意只能从两个数组的尾端开始遍历,否则会破坏原本A数组
class Solution:
def merge(self , A, m, B, n):
# write code here
# step 1: 设定三个指针
i = m - 1 # 指向A数组
j = n - 1 # 指向B数字
k = m + n - 1 # 指向当前A数组
# step2
# 从两个数组最大的元素开始遍历,直到某一个结束
# 每次取出较大的一个值放入数组A空间的最后
while i >= 0 and j >= 0:
if A[i] > B[j]:
A[k] = A[i]
i -= 1
k -= 1
else:
A[k] = B[j]
j -= 1
k -= 1
# step3
# 如果数组B先遍历结束,数组A前半部分已经存在了,不用管
# 但是如果数组A先遍历结束,则需要把数组B剩余的前半部分依次逆序加入数组A前半部分
if i < 0:
while j >= 0:
A[k] = B[j]
k -= 1
j -= 1
return A