一、题目描述
给出一个整数数组 和有序的整数数组 ,请将数组 合并到数组 中,变成一个有序的升序数组
注意:
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