坑点:
1. A会被预分配n个0在后边,len(A) 可能是大于m的
2. m和n都可能是0,这两种情况处理一下直接返回
思路:
1. 排除任一个数组长度为0的情况后,将A尾部的0全部pop掉,保证只剩下需要排序的元素
2. 遍历B
- 若当前元素比A[0]还小,则插入A[0]位置
- 若当前元素比A[-1]还大,则插入A[-1]位置
- 否则遍历A,在A中找一个位置A[k],使得A[k] <= 当前元素,且A[k+1] >= 当前元素,插入后结束对A的遍历
class Solution:
def merge(self , A, m, B, n):
# write code here
if m == 0:
A[:n] = B[:n]
return A
elif n == 0:
return A
else:
for i in range(n):
A.pop()
for i in range(n):
if B[i] <= A[0]:
A.insert(0, B[i])
elif B[i] >= A[-1]:
A.append(B[i])
else:
for j in range(len(A)-1):
if A[j] <= B[i] and A[j+1] > B[i]:
A.insert(j+1, B[i])
break