Leetcode

合并两个有序数组

题目描述

题目连接

代码

由于在题目中规定了A的数组空间的大小为m+n,所以根据题意只能从两个数组的尾端开始遍历,否则会破坏原本A数组

class Solution:
    def merge(self , A, m, B, n):
        # write code here

		# step 1: 设定三个指针
        i = m - 1  # 指向A数组
        j = n - 1  # 指向B数字
        k = m + n - 1  # 指向当前A数组
		
		# step2
		# 从两个数组最大的元素开始遍历,直到某一个结束
		# 每次取出较大的一个值放入数组A空间的最后
        while i >= 0 and j >= 0:
            if A[i] > B[j]:
                A[k] = A[i]
                i -= 1
                k -= 1
            else:
                A[k] = B[j]
                j -= 1
                k -= 1
        
        # step3
        # 如果数组B先遍历结束,数组A前半部分已经存在了,不用管
        # 但是如果数组A先遍历结束,则需要把数组B剩余的前半部分依次逆序加入数组A前半部分
        if i < 0:
            while j >= 0:
                A[k] = B[j]
                k -= 1
                j -= 1
        return A
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值