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 greater 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.
思路:参考Merge Sort,也就是Introduction to Algorithms(2nd Edition) p29的line 10 - line 17
:
i <- 1
j <- 1
for k <- p to r
do if L[i] <= R[j]
then A[k] <- L[i]
i <- i + 1
else A[k] <- R[j]
j <- j + 1
不过这道题目里面我们是从nums的m + n - 1位向前倒着比较然后merge sort的,这样可以省去额外的空间。最后,考虑如果nums2的长度比nums1长的话,就直接把nums2的后面部分直接逆序贴到nums1上去。
代码如下:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int a = m - 1, b = n - 1, i = m + n - 1;
while(a >= 0 && b >= 0){
if(nums1[a] > nums2[b])
nums1[i--] = nums1[a--];
else
nums1[i--] = nums2[b--];
}
while(b >= 0){
nums1[i--] = nums2[b--];
}
}
};
Time: O(m + n).
Space: O(1).
相关题目: