合并两个有序的数组

给出一个整数数组 和有序的整数数组 ,请将数组 合并到数组 中,变成一个有序的升序数组
注意:
1.可以假设 数组有足够的空间存放 数组的元素, 和 中初始的元素数目分别为 和 的数组空间大小为 
2.不要返回合并的数组,返回是空的,将数组 的数据合并到里面就好了
3.数组在[0,m-1]的范围也是有序的

例1:
A: [1,2,3,0,0,0],m=3
B: [2,5,6],n=3
合并过后A为:
A: [1,2,2,3,5,6]

解题思路:
将两个数组a、b中较小的一个依次丢入第三个数组c中,再将数组c拷贝到数组a
class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        int i=0,j=0,p=0;
        int c[m+n];//定义辅助数组C
        while(i<m&&j<n){
            c[p++]=A[i]<=B[j]?A[i++]:B[j++];//将A[i]和B[j]中小的那个丢入C中
        }     
        while(i<m){//如果A中有剩余
            c[p++]=A[i++];
        }
        while(j<n){//如果B中有剩余
            c[p++]=B[j++];
        }
        for(int i=0;i<p;i++)A[i]=c[i];//因为题目要求,将C数组拷贝到A数组中
    }
};





#学习路径#
全部评论
不需要额外空间,从后往前直接赋值到数组A里面就行吧
1 回复 分享
发布于 2021-07-19 17:50

相关推荐

10-15 19:50
已编辑
吉林大学 算法工程师
岗位-仿真算法工程师1.&nbsp;2025.08.28&nbsp;投递2.&nbsp;2025.09.08&nbsp;收到面试链接,时间冲突改到&nbsp;09.11&nbsp;&nbsp;一面a.&nbsp;面试官先介绍流程b.&nbsp;自我介绍c.&nbsp;聊数据驱动动力学实习经历d.&nbsp;聊参数化动力学实习经历e.&nbsp;聊端到端泊车项目f.&nbsp;手撕岛屿数量g.&nbsp;反问h.&nbsp;全程非常愉快,面试官人很好,无八股,全是项目上的探讨i.&nbsp;第二天通知过了3.&nbsp;2025.09.15&nbsp;二面a.&nbsp;面试官介绍流程b.&nbsp;自我介绍c.&nbsp;实习经历(30min,主要深挖细节)d.&nbsp;如果把你做过的内容放在我们公司,你觉得会有哪些新的挑战,该如何面对(还有些其他的问题)e.&nbsp;手撕(用vector实现queue),要求push,&nbsp;pop都是&nbsp;O(1)复杂度,边撕边问如何进一步优化,然后再修改,然后一边问八股f.&nbsp;总时长60多分钟,总体很愉快g.&nbsp;第二天通知二面过,约三面4.&nbsp;2025.09.23&nbsp;三面a.&nbsp;自我介绍b.&nbsp;拷打实习经历c.&nbsp;根据实习经历问了很多开放性问题d.&nbsp;反问e.&nbsp;无八股无手撕f.&nbsp;当晚通知三面已过,约&nbsp;hr&nbsp;面5.&nbsp;2025.09.26&nbsp;hr&nbsp;面a.&nbsp;自我介绍b.&nbsp;说说我的实习经历c.&nbsp;实习期间最有成就感的事情d.&nbsp;mentor,leader实习过程中如何评价自己e.&nbsp;对卡尔的看法f.&nbsp;反问6.&nbsp;2025.10.09&nbsp;hr&nbsp;电话通知当晚CEO面,时间冲突遂推迟7.&nbsp;2025.10.15&nbsp;收到意向&nbsp;&nbsp;约电话沟通
查看13道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务