题目描述
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。
初始化 A 和 B 的元素数量分别为 m 和 n。
示例
输入:
A = [1,2,3,0,0,0], m = 3
B = [2,5,6], n = 3
输出:
[1,2,2,3,5,6]
说明:
A.length == n + m
思路1
将B赋值到A的缓冲区,再进行快排:
代码1
def merge(self, A, m, B, n):
"""
:type A: List[int]
:type m: int
:type B: List[int]
:type n: int
:rtype: None Do not return anything, modify A in-place instead.
"""
A[m:] = B
A.sort()
return A
时间复杂度分析:即快排的时间复杂度:O((m+n)log(m+n))
空间复杂度分析:快排:O(log(m+n))
思路2:
双指针,遍历两个列表,并比较首元素大小,将较小的元素放入第三个列表当中。
代码2:
def merge2(self,A,m,B,n):
'''
:param A: 1,2,3,0,0,0
:param m:
:param B: 2,5,6
:param n:
:return:
'''
C = []
a, b = 0, 0
while a < m or b < n:
if a == m:
C.append(B[b])
b += 1
elif b == n:
C.append(A[a])
a += 1
elif A[a] < B[b]:
C.append(A[a])
a += 1
else:
C.append(B[b])
b += 1
A[:] = C
return A
时间复杂度分析:遍历两列表长度即O(m+n)
空间复杂度分析:第三个列表C长度为m+n,占用O(m+n)
气温回升了,越来越暖和,新冠病毒退散~
想我的梨子饺子~