题目描述
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note
You may assume that nums1 has enough space (size that is greatr or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
分析
混合插入两个有序数组,由于俩数组都是后续的,只需要按顺序比较大小即可。
解法一
最先想到的方法就是建立一个m + n
大小的新数组,然后逐个从num1
和num2
数组中去除元素比较,把较小的加入新数组中,然后考虑nums1
数组有剩余和nums2
数组有剩余的两种情况,最后把新数组的元素重新赋值到nums1
数组中即可,代码如下:
Cpp
|
|
Swift
|
|
解法二
上述解法固然没错,但是还有更简洁的办法,而且不用申请新变量。算法思想是:由于合并后的nums1
数组的大小必定是m + n
,所以从最后面开始往前赋值,先比较nums1
和nums2
中最后一个元素的大小,把较大的那个插入到m + n - 1
的位置上,再依次向前推。如果nums1
中所有的元素都比nums2
中的小,那么前m
个元素都是nums1
的内容,没有改变。如果nums1
中的数组比nums2
大的,当nums1
循环完后,nums2
中还有剩余元素没有加入到nums1
,直接用个循环把nums2
中所有的元素覆盖到nums1
剩下的位置中。代码如下:
Cpp
|
|
Swift
|
|