题解 | #合并两个有序的数组#
合并两个有序的数组
https://www.nowcoder.com/practice/89865d4375634fc484f3a24b7fe65665
坑点: 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