题解 | #合并两个有序的数组#

合并两个有序的数组

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

全部评论
A[k+1] > 当前元素,写错了
点赞
送花
回复
分享
发布于 01-22 12:59 北京
不过 “A[k+1] >= 当前元素”在用例中也是可能出现的,比如A里已经有多个2了,现在又有一个2,用 >= 反而还能节约时间。
点赞
送花
回复
分享
发布于 01-22 13:01 北京
滴滴
校招火热招聘中
官网直投

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 00:50
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务