您的位置:首页 > 其它

88. Merge Sorted Array

2016-11-13 09:42 190 查看
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).

相关题目:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: