二路归并排序
方法一:倒序比较 直接用nums1存储
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m - 1;
int j = n - 1;
int k = m + n - 1;
while (i >= 0 && j >= 0){
if (nums1[i] > nums2[j]){nums1[k--] = nums1[i--];}
else{nums1[k--] = nums2[j--];}
}
while (i >= 0){nums1[k--] = nums1[i--];}
while (j >= 0){nums1[k--] = nums2[j--];}
}
};
方法二:
其实题目中有一个条件,就是nums1的长度等于或大于合并后数组的长度。如果没有这个条件,就要新建一个缓冲数组,然后将数据传回nums1,这样的程序代码如下:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = 0;
int j = 0;
vector<int> num;
while (i < m && j < n) {
if (nums1[i] < nums2[j]){
num.push_back(nums1[i]);
i++;
}
else{
num.push_back(nums2[j]);
j++;
}
}
while (i < m){
num.push_back(nums1[i]);
i+