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.
方法一、代码比较长
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
if(0 == m)
{
nums1 = nums2;
}
else
{
vector<int> :: iterator nums1_idx = nums1.begin();
vector<int> :: iterator nums2_idx = nums2.begin();
int count = 0;//用来统计已经插入到nums1中的nums2的元素的个数
while(nums1_idx != nums1.end() && nums2_idx != nums2.end())
{
if(*nums2_idx <= *nums1_idx)
{
nums1_idx=nums1.insert(nums1_idx,*nums2_idx); //insert在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
count ++;
nums2_idx++;
//nums1_idx++;
}
else
{
nums1_idx++;
}
}
while(nums2_idx != nums2.end())
{
nums1.insert(nums1.begin()+m+count,*nums2_idx);
count++;
*nums2_idx++;
}
nums1.erase(nums1.begin()+m+n,nums1.end()); //删除nums1后面多余的元素,诸如0,解决case
//[1,2,3,0,0,0]
//3
//[2,5,6]
//3
}
}
方法二:从数组A的后面开始追加B,妙哉
void merge(int A[], int m, int B[], int n) {
int i=m-1;
int j=n-1;
int k = m+n-1;
while(i >=0 && j>=0)
{
if(A[i] > B[j])
A[k--] = A[i--];
else
A[k--] = B[j--];
}
while(j>=0) //A数组已经遍历过了,B数组还没有遍历结束的情况下会执行
A[k--] = B[j--];
}