题目名称
Merge Sorted Array—LeetCode链接
描述
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.
分析
题目的意思是合并两个已排序的数组,合并的数组存放在第一个数组中。说白了就是向一个已排序的数组中插入另一个已排序的数组,使得最终的数组依然是有序的。
这里存在几个难点:
- 数组的长度跟所给的长度可能不一样:n<=nums.szie();
- 结果保存在第一个数组中。
我的方法是,先将数组多余的部分删除,然后用vector的iterator来定位遍历数组。
C++代码
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
//删除多余的元素
nums1.erase(nums1.begin()+m,nums1.end());
nums2.erase(nums2.begin()+n,nums2.end());
//定义两个迭代器,分别指向两个数字的首元素
vector<int>::iterator iter1=nums1.begin();
vector<int>::iterator iter2=nums2.begin();
while(iter1!=nums1.end() && iter2!=nums2.end()){
while(*iter1<*iter2 && iter1!=nums1.end())
iter1++;
if(iter1==nums1.end())
break;
else{
nums1.insert(iter1,*iter2);
iter2++;
}
}
while(iter2!=nums2.end()){
nums1.push_back(*iter2);
iter2++;
}
}
};
总结
很多题目都涉及到了容器的知识和相关操作,想写一个C++容器的使用手册。