问题遇到的现象和发生背景
题目:88. 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
问题相关代码,请勿粘贴截图
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
if(n!=0)
{
if(m!=0&&n!=0)
{
int nums3[m+n];
int i=0,j=0,k=0;
for(i=0;i<m+n;i++)
{
if((nums1[k]<=nums2[j])&&k<m)
{
nums3[i]=nums1[k];
k++;
}
else if(j<n)
{
nums3[i]=nums2[j];
j++;
}
}
for(i=0;i<m+n;i++)
{
nums1[i]=nums3[i];
}
}
else
{
for(int i=0;i<n;i++)
{
nums1[i]=nums2[i];
}
}
}
}
运行结果及报错内容
我的解答思路和尝试过的方法
思路:
- 当nums2内无元素时,无需合并数组。
- 当nums2内有元素且nums1内也有元素时,创建一个长度为m+n的数组nums3,依次比较nums1和nums2内的元素,当nums1的指针小于m且nums2的指针小于n时,将较小元素的存入nums3中。最后将nums3数组的值依次赋给nums1。
- 当nums2内有元素且nums1内无元素时,将nums2的元素依次赋给nums1。