Consider double pointers, all starting from [0] of each array
class Solution:
def merge(self, A, m, B, n):
"""
Do not return anything, modify A in-place instead.
"""
indexa = 0
indexb = 0
while indexa < len(A) and indexb < n:#当两个数组都还没到队尾时
if B[indexb] <= A[indexa]:
#若B的cur <= A的cur,将A从cur起(含cur)后移一位,把B的cur放在A的cur位置上
#后移一位B的指针
self.houyi(A,indexa)
A[indexa] = B[indexb]
indexb += 1
else:#若B的cur > A的cur,后移一位A的指针
indexa += 1
if indexa >= len(A) and indexb < n:
#若A已经走完,B还没见底,说明B后面还有比A全部数字都大的数字
allstart = m + indexb
for j in range(n-indexb):
A[allstart+j] = B[indexb+j]
def houyi(self,inputlist,startindex):#从startindex开始后移一位
cur = len(inputlist) - 1
while cur > startindex:
inputlist[cur] = inputlist[cur-1]
cur -= 1