算法题目: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.
大致意思:给定两个已排好序(从小到大)的数组nums1、nums2,要求将nums2中的数据归并到nums1中,且nums1有足够的空间,要求不使用额外空间,时间复杂度O(m+n)。
解法思路:采用从后往前的解法,这样可以避免移动数组中的元素,具体代码如下:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
int i=m-1;
int j=n-1;
int k=nums1.size()-1;
while(j>=0)
{
if(i>=0&&nums1[i]>nums2[j])
{
nums1[k]=nums1[i];
i--;
}
else
{
nums1[k]=nums2[j];
j--;
}
k--;
}
return;
}