合并两个有序数组【刷题记录】

导读:本篇文章讲解 合并两个有序数组【刷题记录】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、题目描述

给出一个整数数组 和有序的整数数组 ,请将数组 合并到数组 中,变成一个有序的升序数组
注意:
1.可以假设A数组有足够的空间存放B数组的元素,B和A中初始的元素数目分别为m和n,A的数组空间大小为m+n
2.不要返回合并的数组,返回是空的,将数组B的数据合并到A里面就好了
3.A数组在[0,m-1]的范围也是有序的

示例:

输入: [4,5,6],[1,2,3]
返回值: [1,2,3,4,5,6]
说明:
A数组为[4,5,6],B数组为[1,2,3],后台程序会预先将A扩容为[4,5,6,0,0,0],B还是为[1,2,3],m=3,n=3,传入到函数merge里面,然后请同学完成merge函数,将B的数据合并A里面,最后后台程序输出A数组。

二、解题思路:
双指针法:从A、B数组的末尾开始遍历,将较大者保存到另一个指针指向的新A数组的末尾。

1、双指针从A和B的m、n尾部遍历。
2、比较A和B的m、n尾部的值,将较大值赋给A整体数组的尾部,指针左移。
3、注意特殊情况处理:A的尾指针已遍历结束,B尾指针还未结束。

三、解题代码(python)

class Solution:
    def merge(self , A, m, B, n):
        # write code here
        while m > 0 and n > 0:
            if A[m-1] >= B[n-1]:
                A[m+n-1] = A[m-1]
                m-=1
            else:
                A[m+n-1] = B[n-1]
                n-=1
        if n > 0:
            A[:n] = B[:n]
        return A

思路:双指针分别指向nums1,和nums2的尾部,比较最大的元素。定义临时变量,将比较后的元素大的放到nums1尾部。

class Solution:
    def merge(self, A, m, B, n):
        i = m-1
        j = n-1
        temp = m+n-1
 
        while i>=0 and j>=0:
            if A[i]>=B[j]:
                A[temp] = A[i]
                i = i-1
                temp =temp-1
            else:
                A[temp] = B[j]
                j = j-1
                temp = temp-1
        while j>=0:
            A[temp] = B[j]
            j = j-1
            temp = temp-1
        return A

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99776.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!