题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/31a14a8c76caa831875235ed4dd03c15.png)
Leetcode 88. 合并两个有序数组
代码(首刷自解)
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int p1 = m - 1, p2 = n - 1, p3 = m + n -1;
if(m == 0) {
nums1.swap(nums2);
return;
}
while(p1 >= 0 && p2 >= 0) {
if(nums1[p1] > nums2[p2]) {
nums1[p3] = nums1[p1];
p1--;
} else {
nums1[p3] = nums2[p2];
p2--;
}
p3--;
}
while(p1 >= 0) {
nums1[p3--] = nums1[p1--];
}
while(p2 >= 0) {
nums1[p3--] = nums2[p2--];
}
}
};
代码(8.29 二刷自解)
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int i = m-1, j = n-1;
int k = m+n-1;
while(k >= 0 && i >= 0 && j >= 0) {
if(A[i] > B[j]) {
A[k--] = A[i--];
} else {
A[k--] = B[j--];
}
}
while(k >= 0 && i >= 0) {
A[k--] = A[i--];
}
while(k >= 0 && j >= 0) {
A[k--] = B[j--];
}
}
};
代码(9.16 三刷自解)
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
if(!n) {
return;
}
if(!m) {
copy(nums2.begin(), nums2.end(), nums1.begin());
return;
}
int i = m-1, 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--];
}
}
};