您的位置:首页 > 其它

Leetcode Merge Sorted Array

2017-06-17 19:01 316 查看
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.

方法一:想到的最直接的方法就是通过临时数组来实现归并算法

代码如下:

class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
vector<int> temp;
int i=0,j=0;

while(i<m&&j<n)
{
if(nums1[i] < nums2[j])
{
temp.push_back(nums1[i]);
i++;
}
else
{
temp.push_back(nums2[j]);
j++;
}
}

while(i<m)
{
temp.push_back(nums1[i]);
i++;
}

while(j<n)
{
temp.push_back(nums2[j]);
j++;
}
nums1 = temp;
}
};
但是这么做空间复杂度为O(N),是否有更好的方法呢?

方法二:

当然有更好的办法,题目中特意提到了nums1可以容纳m+n个元素,所以我们可以从后往前进行复制,无需额外的空间资源

代码如下:

class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int count = m+n-1;
m--;n--;
while(m>=0&&n>=0) nums1[count--] = (nums1[m] > nums2
?nums1[m--]:nums2[n--]);

while(m>=0) nums1[count--] = nums1[m--];
while(n>=0) nums1[count--] = nums2[n--];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode