题目描述:
首刷自解:
vector<int> nums3;
nums3.resize(m + n);
vector<int>::iterator iter1, iter2;
vector<int>::iterator iter3;
iter1 = nums1.begin();
iter2 = nums2.begin();
iter3 = nums3.begin();
while (iter1!= nums1.begin()+m && iter2 != nums2.end())
{
if (*iter1 >= *iter2)
{
*iter3++ = *iter2++;
}
else
{
*iter3++ = *iter1++;
}
}
if (iter1 == nums1.begin()+m)
copy(iter2, nums2.end(), iter3);
else
copy(iter1, nums1.begin()+m, iter3);
copy(nums3.begin(), nums3.end(), nums1.begin());
进阶看解:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int iter1 = m-1, iter2 = n-1;
int pos = m+n-1;
while (iter1 >=0 && iter2 >=0)
{
if (nums1[iter1]<= nums2[iter2])
nums1[pos--] = nums2[iter2--];
else
nums1[pos--] = nums1[iter1--];
}
if (iter1 == -1)
copy(nums2.begin(), nums2.begin()+iter2+1, nums1.begin());
}
};