合并两个非递减数组(力扣刷题)

2023-12-13 16:59:32

工具:pycharm(python3.9)、力扣

给你两个按?非递减顺序?排列的整数数组?nums1?和?nums2,另有两个整数?m?和?n?,分别表示?nums1?和?nums2?中的元素数目。

请你?合并?nums2?到?nums1?中,使合并后的数组同样按?非递减顺序?排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组?nums1?中。为了应对这种情况,nums1?的初始长度为?m + n,其中前?m?个元素表示应合并的元素,后?n?个元素为?0?,应忽略。nums2?的长度为?n?。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

方法一:定义两个指针分别指向两个数组的初始位置,依次比较数组元素的大小,依次将小的那个数放入另一个数组中,最后将排好序的新的数组赋值给nums1即可

nums1=[0,1,0]
nums2=[0]
m,n=2,1
sorted1 = []
p1, p2 = 0, 0
while p1 < m and p2 < n:
    if nums1[p1] <= nums2[p2]:
        sorted1.append(nums1[p1])
        p1 = p1 + 1
    else:
        sorted1.append(nums2[p2])
        p2 = p2 + 1
if p1 < m:      #nums1没有遍历完
    for num in range(p1, m):
        sorted1.append(nums1[num])
else:           #nums2没有遍历完
    for num in range(p2, n):
        sorted1.append(nums2[num])
nums1[:] = sorted1
#打印,查看结果
print(nums1)
print(nums2)

方法二:将两个数组先合并,然后再对它进行排序(我这里用的冒泡排序,应该还有更好的,效率高的)

nums1=[-1,1,2,4,5,0,0,0,0,0]
nums2=[0,4,6,7,8]
m,n=5,5
nums1[m:m+n]=nums2
print(nums1)
#用冒泡排序
for i in range(0,m+n):
    for j in range(0,m+n-1-i):
        if nums1[j]>nums1[j+1]:
            tmp=nums1[j+1]
            nums1[j+1]=nums1[j]
            nums1[j]=tmp
#打印,查看结果
print(nums1)

还有一种比较流氓的做法,就是合并后直接调用sort()函数

#方法二:先将两个数组的元素合并,然后对数组进行排序
nums1=[0,1,0]
nums2=[0]
m,n=2,1
nums1[m:m+n]=nums2
print(nums1)
nums1.sort()    #调用sort()函数,默认为升序排列
print(nums1)

文章来源:https://blog.csdn.net/m0_58498198/article/details/134893041
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。