算法31 88. 合并两个有序数组
最容易想到的
利用sort()
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for(int i=0;i<n;i++){
nums1[m+i]=nums2[i];
}
sort(nums1.begin(),nums1.end());
}
};
归并排序
因为有序,左右分别提一个比较
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int a,b;
a=b=0;
vector<int> tmp;
while(a<m&&b<n){
(nums1[a]>nums2[b]) ? tmp.push_back(nums2[b++]):tmp.push_back(nums1[a++]);
}
while(a<m) tmp.push_back(nums1[a++]);
while(b<n) tmp.push_back(nums2[b++]);
nums1=(move(tmp));
}
};
再优化一点
nums1已给出空间,利用该空间从后往前归并
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int a=m+n-1;
m--;
n--;
while(n>=0) nums1[a--]=(m>=0&&nums1[m]>nums2[n]) ? nums1[m--]:nums2[n--];
}
};