LeetCode88题 合并两个有序数组 (21.3.29)

力扣 88题 合并两个有序数组

题目描述:

给出两个有序整数数组 nums1 nums2,请你将nums2合并到nums1中,使 nums1 成为一个有序数组。

初始化 nums1nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

涉及内容:数组 双指针

示例:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

思路:

由于nums1和nums2是有序的,由此我们可以从这出发,直接比较他们当前最大值,把比较结果放在最后

具体就是用i指针指向nums1的m-1下标处,j指针指向nums2的n-1下标处,再用k指针指向nums1的m+n-1下标(即最后一个下标处),然后比较i和j所指的数值的大小,将较大的值赋给k所指的地方,然后k和i(j)做减一处理

最后考虑特殊情况,即存在一个空数组时:

  1. 若nums1为空,则需要将nums2的数值全覆盖在nums1中
  2. 若nums2为空,则直接不需要处理输出nums1即可

提交结果:

完整代码:

A=[-6,-4,-3,0,1,5,6,7,0,0,0,0,0]
m=8
B=[1,2,3,8,9]
n=5
i,j,k=m-1,n-1,m+n-1
while i>=0 and j>=0:
    if A[i]>B[j]:
        A[k]=A[i]
        k-=1
        i-=1
    else:
        A[k]=B[j]
        k-=1
        j-=1
while j>=0:  #这个判断是考虑A为空设置的 若A.B有一个为空则直接跳过第一个while循环,此时若B为空,则直接输出A即可
    A[k] = B[j]
    k -= 1
    j -= 1
print(A)

思路2:

将nums2的数据先导入nums1 然后使用sort()

(但、、这样是不是有点没营养)

nums1[m:m+n]=nums2[:n]
nums1.sort()
print(nums1)
posted @ 2021-03-29 22:11  乖张❤  阅读(84)  评论(0)    收藏  举报