在本篇文章里,我将分享一道很经典的算法题———合并两个有序的数组,并且分享解题思路,希望可以帮助到你😀😀😀
题目描述:
给出一个有序的整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组
数据范围:
0≤n,m≤100,|A_i| <=100∣Ai∣<=100,|B_i| <= 100∣Bi∣<=100
注意:
1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了,且后台会自动将合并后的数组 A 的内容打印出来,所以也不需要自己打印
3. A 数组在[0,m-1]的范围也是有序的
示例1:
输入:[4,5,6],[1,2,3】
返回值:[1,2,3,4,5,6]
说明:A数组为[4,5,6],B数组为[1,2,3],后台程序会预先将A扩容为[4,5,6,0,0,0],B还是为[1,2,3],m=3,n=3,传入到函数merge里面,然后请同学完成merge函数,将B的数据合并A里面,最后后台程序输出A数组
示例2
输入:[1,2,3],[2,5,6]
返回值:[1,2,2,3,5,6]
以下代码均经过牛客测试,均正确,请放心测试😊😊😊
解题思路:
设一个新数组C,两数组依次进行比较,小的尾插到新数组。
代码:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { int i=m-1,j=n-1; int dst=m+n-1; while(i>=0&&j>=0) { if(nums1[i]>nums2[j]) { nums1[dst--]=nums1[i--]; } else nums1[dst--]=nums2[j--]; } while(i>0) { nums1[dst--]=nums1[i--]; } while(j>=0) { nums1[dst--]=nums2[j--]; } }
结果展示:
编辑
最后
十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:
01.“以前我觉得成绩不重要。清华、北大、复旦、交大,只能代表学生时代的成就。后来我发现,努力是种习惯,它会贯穿终生。”
02.等你优秀了,你想要的都会来找你。
03.你可以不漂亮,也可以不爱打扮,甚至可以很胖,你可以不优秀,可以不上进,甚至可以不聪明。但,我不可以。
04.头等舱可以优先登机银行VIP可以不用排队演唱会最贵的票位置也最好世界从不平等你有多努力就有多特殊.
05.多读点书,要不然你的三观是由你的亲朋好友决定的。
最后如果觉得我写的还不错,请不要忘记点赞✌,收藏✌,加关注✌哦(。・ω・。)
**愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!**