⭐️ 题目描述
🌟 leetcode链接:合并两个有序数组
⭕️ 代码:
/*
思路:双指针问题
1.从前往后拷贝依次比较两个数组元素的较小值,较小值先拷贝
- 问题:从前拷贝会造成覆盖(有问题)
2.从后往前拷贝依次比较两个数组元素的较大值,较大值先拷贝
- 需要考虑特殊情况
当 nums2先拷贝完 那么nums1就是最终结果
当 nums1先拷贝完,nums2还有元素,所以要依次把nums2在拷贝到nums1对应位置
*/
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int nums1End = m - 1;
int nums2End = n - 1;
int end = m + n - 1;
// 当两个下标有一个下标越界循环结束
while (nums1End >= 0 && nums2End >= 0) {
if (nums1[nums1End] > nums2[nums2End]) {
nums1[end--] = nums1[nums1End--];
} else {
nums1[end--] = nums2[nums2End--];
}
}
// 特殊情况:当 nums1先拷贝完,nums2还有元素,所以要依次把nums2在拷贝到nums1对应位置
while (nums2End >= 0) {
nums1[end--] = nums2[nums2End--];
}
}