题目链接:力扣
思路:反向双指针,从nums1和nums2末尾开始合并,注意nums1和nums2其中一个为空时的处理
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int p1 = m - 1, p2 = n - 1;
int tail = m + n - 1;
int cur;
while (p1 >= 0 || p2 >= 0) {
if (p1 == -1) {
cur = nums2[p2--];
} else if (p2 == -1) {
cur = nums1[p1--];
} else if (nums1[p1] > nums2[p2]) {
cur = nums1[p1--];
} else {
cur = nums2[p2--];
}
nums1[tail--] = cur;
}
}
};
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int p1 = m - 1, p2 = n - 1, p = n + m - 1;
while(p1>=0&&p2>=0) {
if(nums1[p1]>nums2[p2]) {
nums1[p--] = nums1[p1--];
}
else {
nums1[p--] = nums2[p2--];
}
}
while(p2>=0) {
nums1[p--] = nums2[p2--];
}
while(p1>=0) {
nums1[p--] = nums1[p1--];
}
}
};