88.合并两个数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
- 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例: |
---|
输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6] |
我的写法:先将nums2中的部分插入到nums1中,然后将剩下的元素插入到最后
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int j = 0,i = 0;
for(; i<m+j && j<n; i++){
if(nums1[i] >= nums2[j]){
nums1.insert(nums1.begin()+i, nums2[j]);
j++;
}
}
for(; j<n; j++)
nums1.insert(nums1.begin()+(i++), nums2[j]);
nums1.resize(m+n);
}
};
评论里的另一种方法:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int last=m+n-1;
while(n){
if(m==0||nums1[m-1]<=nums2[n-1]){
nums1[last--]=nums2[--n];
}else{
nums1[last--]=nums1[--m];
}
}
}
};
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.