仅供自己学习记录
LeetCode刷题日记2021-4-5
题目描述:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解题思路:
-
nums1 nums2分别有序
-
定义两个指针分别指向nums1和nums2的尾部
-
当nums1[m-1]大于nums[n-1]将nums1[m-1]放到nums[m+n-1]位置上 并让指针向前移动一位
-
当nums1[m-1]小于nums[n-1]将nums2[n-1]放到nums[m+n-1]位置上 并让指针向前移动一位
-
-
当m=0或者n=0时说明nums1或nums2遍历结束
-
当m=0时说明nums1遍历结束 但是nums2还有数因此将nums2剩余的数字复制到nums1中
-
当n=0时说明nums2遍历结束 nums1中剩余的数字本身就是有序排列无需做其他操作
-
解题代码:
k=m+n-1
while m>0 and n>0:
if nums1[m-1]>nums2[n-1]:
nums[k]=nums1[m-1]
m-=1
else:
nums[k]=nums1[n-1]
n-=1
k-=1
nums1[0:n]=nums2[0:n]
来源
https://leetcode-cn.com/problems/merge-sorted-array/solution/fu-xue-ming-zhu-dong-hua-ti-jie-cong-hou-teq6/