题目链接:https://leetcode.cn/problems/merge-sorted-array/
📕题目要求:
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
🧠解题思路——尾插法
由于两个数组序列都为非递减序列,在某种程度上就具有了一些规律,并且数组nums1的有效数据个数比数组总大小要小,因此我们可以依次将两个数组的最后一项进行比较选出较大的一项进行尾插。
🍭代码示例
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int end1 = m-1;
int end2 = n-1;
int i = m+n-1;
while(end1>=0&&end2>=0)
{
if(nums1[end1]>=nums2[end2])
{
nums1[i--]=nums1[end1--];
}
else
{
nums1[i--]=nums2[end2--];
}
}
while(end2>=0)
{
nums1[i--]=nums2[end2--];
}
}
这就是我对本题的理解,如果大家有更优的解,欢迎交流,一起进步!