classSolution: defmerge(self, A: List[int], m: int, B: List[int], n: int) -> None: """ Do not return anything, modify A in-place instead. """ for a inrange(m+n-1, -1, -1): # 快速结束条件 if n == 0: break if m == 0: for i inrange(n): A[i] = B[i] break # A与B中最后的数比较,较大的塞最后 if A[m-1] > B[n-1]: A[a] = A[m-1] A[m-1] = 0 m = m-1 else: A[a] = B[n-1] n = n - 1
思路:每次比较两数组最后有效的数,大的放后面。
大佬解法
这一次我的思路居然和大佬的一样…..
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution: defmerge(self, A: List[int], m: int, B: List[int], n: int) -> None: idx1 = m - 1 idx2 = n - 1 cur = m + n - 1# 添加 cur 指针追踪位置 while idx1 > -1and idx2 > -1: # print(A) if A[idx1] < B[idx2]: A[cur] = B[idx2] cur -= 1 idx2 -= 1 else: A[cur] = A[idx1] cur -= 1 idx1 -= 1 if idx2 != -1: A[:idx2 + 1] = B[:idx2 + 1] # 比较完B还有剩下的,全填到A前面即可 return A