leetcode 面试题 10.01. 合并排序的数组(python)

方法一:把B的内容直接复制到A的剩余空间中,然后再对A应用快速排序。
时间复杂度:O(m+n)log(m+n)
代码如下:

class Solution:
    def merge(self, A, m, B, n):

    	A[m:] = B
    	A.sort()
    	return A

方法二:双指针
利用两个指针分别指向两个数组A和B,从头开始比较两个数组的元素大小,小的放到一个新的数组sort中;
代码如下:

class Solution:
    def merge(self, A, m, B, n):



    	a = 0
    	b = 0
    	sort = []

    	while a < m or b < n:

    		if a == m:

    			sort.append(B[b])
    			b += 1

    		elif b == n:
    			sort.append(A[a])
    			a += 1

    		elif A[a] <= B[b]:

    			sort.append(A[a])
    			a += 1

    		else:

    			sort.append(B[b])
    			b += 1



    	A[:] = sort
    	return A

方法三:逆向的双指针(原地修改,不需要额外的存储空间)
对于数组A和数组B分别设置指针a, b。a初始指向数组A的最后一个元素,即a=m-1, b初始指向数组B的最后一个元素,即b=n-1; 比较a指针指向的元素和b指针指向的元素大小,大的放到A数组的最有一个一个元素位置(即m+n-1这个位置)。然后依次顺序对元素进行插入操作。

代码如下:

class Solution:
    def merge(self, A, m, B, n):

    	a, b = m - 1, n - 1

    	tail = m + n - 1



    	while a >=0 or b >= 0:

    		if a == -1:
    			A[tail] = B[b]
    			b -= 1
    			# n -= 1
    		elif b == -1:
    			A[tail] = A[a]
    			a -= 1
    			# m -= 1



    		elif A[a] <= B[b]:

    			
    			A[tail] = B[b]
    			b -= 1
    			# n -= 1

    		else:
    			A[tail] = A[a]
    			a -= 1
    			# m -= 1
    		
    		tail -= 1


    	return A
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值