cpp
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
// 定义三个指针,逻辑和之前一致
int p1 = m - 1; // nums1有效元素末尾
int p2 = n - 1; // nums2有效元素末尾
int p = m + n - 1; // nums1合并后的填充位置末尾
// 从后往前比较,填充较大值
while (p1 >= 0 && p2 >= 0) {
if (nums1[p1] >= nums2[p2]) {
nums1[p] = nums1[p1];
p1--;
} else {
nums1[p] = nums2[p2];
p2--;
}
p--;
}
// 处理nums2剩余元素(nums1先遍历完的情况)
while (p2 >= 0) {
nums1[p] = nums2[p2];
p2--;
p--;
}
}


该代码实现了两个有序数组合并的功能。
算法使用三指针法,从数组末尾开始比较和填充,将较大的元素依次放入nums1的末尾。
当nums1的元素先比较完时,直接将nums2剩余元素复制到nums1前端。
这种方法无需额外空间,时间复杂度为O(m+n),是合并有序数组的高效解决方案。